【PHP】下らねぇ質問はここに書き込みやがれ 26
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/08/07(月) 13:11:50ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレは>>2-10 関連スレは>>4-10 FAQは>>6-10 辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0045nobodyさん
2006/08/07(月) 23:05:02ID:???ただし、この処理がほぼ同等の速度になるのはディレクトリの中のファイル数が
極端に多いわけじゃない場合までで、これが異常に多くなると遅くなる。
ただ、遅くなると言っても、PHPで書いたプログラムがファイルを1行1行探すよりは
ずっと高速な処理なので、よっぽどバカみたいにファイル数が増えない限りは
ファイルの中を探すよりはまだ速いと思うよ。
ファイル検索が遅くなるほど数があれば、1個のデータファイルにした場合も
行数がめちゃくちゃでかくなるからね。これはもうとんでもなく遅い。
多分、PHPで探すくらいならshellでgrepでも呼び出した方がまだ速い。
004645
2006/08/07(月) 23:07:13ID:???>>44
>>45がほぼその回答になると思う。
PHPのファイル処理なんて大して速くないので、OSがやってくれる
ディレクトリ(iノード)の検索の方がずっと早いです。
数が少なければ大した差じゃないけど、増えれば増えるほどその差は広がる一方かと。
0047前スレ982
2006/08/07(月) 23:12:37ID:???>>>45がほぼその回答になると思う。
あ、ちょうどなりました(笑
同等ではなく、ファイル名検索の方が早いんですね。
大変参考になりました。回答してくれたみなさんありがとうございました。
0048nobodyさん
2006/08/07(月) 23:21:45ID:???ただ、ファイル数が1000を超えるようになってくると、iノードの処理も複雑になってくるので
頑張ればファイルの中身を探す方が逆転できる余地も出てくると思う。
もっとも、普通に頭から1行ずつ舐めてって行頭の数字を判別して〜なんてやり方じゃ
絶対に勝てないと思うけどね。
0049nobodyさん
2006/08/08(火) 00:02:56ID:???というか今まで鯖任せでそこまで考えることがあまりなくなってたから初心にかえった気分だ。
0050nobodyさん
2006/08/08(火) 01:08:07ID:???で存在しないディレクトリを開くと
Warningがでちゃうんだけど、
これって仕方ないの?
仕方なくないとしたらどういう原因が考えられるの?
005149
2006/08/08(火) 01:10:39ID:qLlWPezkPHP : 5.0.4
HTTP : Apache2.0
です。
0054nobodyさん
2006/08/08(火) 05:39:33ID:???0055nobodyさん
2006/08/08(火) 06:34:51ID:???echo gethostbyname("nifty.com"); // nifty.com
echo gethostbyname("www.nifty.com"); // 202.248.239.42
0056nobodyさん
2006/08/08(火) 07:49:51ID:???ファイル名エントリーはB木だけどinodeは固定長リストのリンク。
数が多くなると拡張inodeリストのリンク数が増えて検索が遅くなる。
0057nobodyさん
2006/08/08(火) 08:00:28ID:vPDdJKnB他人のスクリプトを見て勉強するのが良いのでしょうか?
どこかにコーディングマニュアルらしきものがあった気がするのですが
見つけることが出来ませんでした。マニュアルの言語はなるべく日本語希望。
0058nobodyさん
2006/08/08(火) 08:17:02ID:???> どこかにコーディングマニュアルらしきものがあった気がするのですが
これ?
ttp://pear.php.net/manual/ja/standards.php
0059nobodyさん
2006/08/08(火) 08:25:22ID:vPDdJKnBああ、それです。
PEARにあったのですね。ありがと
0061nobodyさん
2006/08/08(火) 08:57:09ID:???0062nobodyさん
2006/08/08(火) 09:04:29ID:???ZFのほうもあるよ
ttp://framework.zend.com/manual/ja/coding-standard.html
0063nobodyさん
2006/08/08(火) 09:12:13ID:vPDdJKnBどうもです。
0064nobodyさん
2006/08/08(火) 09:20:35ID:???仕様
もしscandir($dir_name)で$dir_nameが正しくディレクトリであったとしても、オープン出来なければ異常事態。
$dir_nameが存在しないならオープンできることはありえないから常に異常事態。
要するにfile_exists関数でディレクトリの存在確認したのが前提ということ。
0066nobodyさん
2006/08/08(火) 09:38:49ID:5ybA5K11/etc/resolv.confの設定を誤って、SSHでの接続が出来なくなってしまいました。
現在アクセスできる方法はApacheモジュールのPHPだけです。
そこで、wwwで実行してるPHPをセキュリティーホールに関係なくrootになれるアカウントにsuして、そのアカウントからrootになることを考えています。
rootになった後はPHPのfputsで編集しようと思っていますが、PHPの実行ユーザーの変更が分かりません。。
system関数でsuを発行しても、次のパスワードの入力が出来ないので‥
サーバーではSSHとApacheしか動いていません。しかし、SSHに接続できるのは、今現在localhostしかいない状態です。。(/etc/hosts)
0068nobodyさん
2006/08/08(火) 09:59:24ID:5ybA5K11FTPがあります。FTPでの接続はできるんです。
0069nobodyさん
2006/08/08(火) 10:00:44ID:???expect コマンドをシェルから実行すれば、同じようなことができると思う
0071nobodyさん
2006/08/08(火) 10:05:27ID:???0072nobodyさん
2006/08/08(火) 10:07:24ID:???--with-expect 付きで make した PHP なら expect も使えます。
expect コマンドが使えるなら expect なスクリプトを用意して PHP から
system すれば良い。
0073nobodyさん
2006/08/08(火) 10:15:39ID:5ybA5K11rootになるにはsuしかだめなのですが‥
FTPでrootになる方法もないし、、
PHPでSSHにつなぐ方法はありますか?
PHPで、localhostのSSHに接続->su root->/etc/resolv.confに>>でやろうと思ったのですが‥
0074nobodyさん
2006/08/08(火) 10:16:30ID:???> /etc/resolv.confの設定を誤って、SSHでの接続が出来なくなってしまいました。
これ、どういうエラーが出るの?
どういう設定してるか分からないけど、IP アドレス指定で試してみた?
0075nobodyさん
2006/08/08(火) 10:23:27ID:5ybA5K110077nobodyさん
2006/08/08(火) 10:46:27ID:???Perl で expect も出来るけど、Expect.pm がないことがあるだろうし。
0078nobodyさん
2006/08/08(火) 10:54:10ID:5/p7Z87Xhttp://jp.php.net/manual/ja/function.mysql-real-escape-string.php の「例3」にある
やり方で一応大丈夫?
addslashes()はしたほうがいいのかなぁ?
0080nobodyさん
2006/08/08(火) 11:21:35ID:???それPHPの質問か?
よくわからんけどPCが壊れたなら、新しいの買ってこればいいんじゃね?
それか修理に出したほうが早いだろ
0081nobodyさん
2006/08/08(火) 11:24:45ID:???PHP の質問かと言われれば微妙だが、壊れているのとは違う。
で、結局どうなったのかな? Ruby があるなら、さくっと出来るけどなぁ。
0082nobodyさん
2006/08/08(火) 13:41:51ID:???> addslashes()はしたほうがいいのかなぁ?
何のためにstripslashes()までやってると思ってるんだお前。
0083nobodyさん
2006/08/08(火) 18:06:56ID:???ないでしょうか?
$a = array();
$b[1] = 1;
$a = array_merge($a,$b);
print_r($a);
0086nobodyさん
2006/08/08(火) 18:50:03ID:CQRoL3Un0087nobodyさん
2006/08/08(火) 18:54:59ID:???0088nobodyさん
2006/08/08(火) 19:07:01ID:???htmlspecialchars 後に改行タグに戻す
0089nobodyさん
2006/08/08(火) 19:14:24ID:???これを
>>72
に置き換えたいのですが、どのようにすれば良いのでしょうか?
0090nobodyさん
2006/08/08(火) 19:14:47ID:4QDp9Gx3ttp://www.bitfolge.de/rsscreator-en.html
上記URLにサンプルも提示されているので基本的なことはすぐできたんですが
自分なりのアレンジをしようと思うといまいち使い勝手がわかりません。
出力の文字コードをデフォルトのlatin-1からUTF-8にしたいと思い
呼び出し側(自作スクリプト)で指定を試みたんですがうまく反映されません。
逆にソースコード中のその部分を書き換えることでUTF-8で出力できたんですが、
これはそういう使い方でいいんでしょうか?
もし真っ当な指定の仕方が他にあるようでしたらおしえてください。
現在のところUniversalFeedCreatorクラスを用い、createFeedメソッドで出力しようとしています。
お願いします。
009190
2006/08/08(火) 19:34:44ID:???>>ソースコード中のその部分を書き換えることで
と書いたのは、もとのクラスファイルのことです(FeedCreator.class.php)
009289
2006/08/08(火) 19:40:57ID:???009489
2006/08/08(火) 20:19:13ID:???正規表現を使ったやり方が知りたいんです。
0095nobodyさん
2006/08/08(火) 20:34:18ID:???0096nobodyさん
2006/08/08(火) 23:05:16ID:???正規表現が分からないなら、strpos使って位置を調べてsubstr_replaceで置換すれば?
その程度のことなら別に正規表現すら要らん。
0098nobodyさん
2006/08/08(火) 23:29:00ID:???009989
2006/08/09(水) 00:05:28ID:???$comm = preg_replace("/~<a[ \t\n\r\fa-zA-Z0-9_\"=]+blank\">$/", "", $comm);
これじゃうまくいかなくて・・・
0100nobodyさん
2006/08/09(水) 00:22:43ID:???/<a[^>]+blank">/
とかでどうだろうか
0101nobodyさん
2006/08/09(水) 00:52:31ID:???俺も適当なの試してみた。
アンカにリンクを貼ろうと思ったんだがうまくいかなすwww
正規表現ってむずいな
0102nobodyさん
2006/08/09(水) 00:59:19ID:???これの0-9の文字って取得できるの?
0104nobodyさん
2006/08/09(水) 01:08:04ID:???ごめ、すっかり忘れてた
preg_replace("/>>(\d{1|2|3|4})+/","<a href=\"#log\\1\">>>\\1</a>"$str);
こうできたのは良いが、\\1に数値が1文字しか入らないのはなぜだろ・・・
0105nobodyさん
2006/08/09(水) 01:08:28ID:???~ と $ の意図が分からんが、それを除外しても駄目。
なぜなら「blank」の部分が a-z にマッチするから。
だから、最短一致をさせないといけない。
0106nobodyさん
2006/08/09(水) 01:08:37ID:???preg_replace("/>>(\d{1|2|3|4})+/","<a href=\"#log\\1\">>>\\1</a>",$str); ね
0108nobodyさん
2006/08/09(水) 01:17:24ID:???{1|2|3|4}って意味わからんぞ。何をしようとしている?
で、(\d+)と、+の部分もカッコに含めないと数字全桁は取れないだろ。
0109nobodyさん
2006/08/09(水) 01:36:59ID:XkNwEDtZの
<?php
$image = imagecreate(200, 200);
$black = imagecolorallocate($image, 0, 0, 0);
imagepng($image);
imagedestroy($image);
?>
で画像表示が出来ません。文字化けみたいになってる。
4.3.11でGDできることは確認。。
誰か助けてください。
0111nobodyさん
2006/08/09(水) 01:42:39ID:???ブラウザで文字化けしてるってことか?
どんなレスポンス返してるのか全部見てみなよ
content-typeがtext/htmlになってるだけじゃないの?
0112nobodyさん
2006/08/09(水) 01:44:13ID:???ここのサイトってどういう設定にしてるんだ??
<?php
の次の行に
header("Content-type: image/png");
って足せば動かない?
0113112
2006/08/09(水) 01:45:14ID:???ttp://masago.kir.jp/phpsc.php?s=php2004010301.php
0114nobodyさん
2006/08/09(水) 01:52:00ID:???http://example/のときはリンクを貼る
http://example/img.jpgのときは画像を表示させる
こういうのってできないんだよな
0115nobodyさん
2006/08/09(水) 02:01:15ID:???0116nobodyさん
2006/08/09(水) 02:04:17ID:???register globalがonだから、XSSがおきるよ
ttp://masago.kir.jp/php20030111s.php?msg=%3Cscript%3Ealert%28document.cookie%29%3B%3C/script%3E
0118nobodyさん
2006/08/09(水) 02:09:08ID:???すんません、教えてください。
http://example/だけのときは
<A href="http://example/">http://example/</A>とリンクを貼り、
http://example/img.jpg(何らかの画像)のときは
<IMG src="http://example/">と画像を貼りたいんです
0120nobodyさん
2006/08/09(水) 02:22:09ID:???0122nobodyさん
2006/08/09(水) 03:21:02ID:???$_GET['hogehoge']にtestを格納して
<a name="5"></a>に飛ぶ予定だったんですが、
$_GET['hogehoge']にtest#5が入ってしまいます。
どのようにすれば
$_GET['hogehoge']にtestを格納し、
<a name="5"></a>に飛ぶことができるのでしょうか
0123nobodyさん
2006/08/09(水) 03:37:24ID:???0124nobodyさん
2006/08/09(水) 03:41:15ID:???手元の PHP 4.4.2 では $_GET['hogehoge'] に # 以降は含まれていなかったが。
0125nobodyさん
2006/08/09(水) 04:54:12ID:???文字列の末尾が .jpg .jpeg .png .gif のときはIMGタグに、それ以外のときはAタグに変換、がお手軽。
厳密にやるならそれぞれソケットでHEADアクセスして、返ってきたレスポンスのContent-Typeを判定。
0127nobodyさん
2006/08/09(水) 08:28:07ID:jiSDaPkk$name = isset ($_POST['name']) || $_POST['name'] !== '' ? $_POST['name'] : $name;
terniary条件文でこのように書くのはダメなのでしょうか?
論理演算子でどちらかがTRUEなら、最初の式がTRUEになるはずなのですが…
$_POST の値が空 ('') だと$nameが$nameに代入されません...
0128nobodyさん
2006/08/09(水) 08:30:54ID:jiSDaPkk正: $_POST['name'] の値が空 ('') だと$nameの値(名無しさん)が$nameに代入されません...
誤: $_POST の値が空 ('') だと$nameが$nameに代入されません...
0129nobodyさん
2006/08/09(水) 09:19:05ID:jiSDaPkk論理演算子の '||' は、どちらかの式がTRUEの場合TRUEなのですから、これでは
isset ($_POST['name'])がTRUEの場合、$_POST['name']が空でも$_POST['name']を$nameに代入してしまう…orz
つまり、これは:
$name = '名無しさん';
$name = isset ($_POST['name']) && $_POST['name'] !== '' ? $_POST['name'] : $name;
でしたね。本当にスマソ
0130nobodyさん
2006/08/09(水) 09:31:58ID:???0131nobodyさん
2006/08/09(水) 09:38:57ID:???もしないようなら同じようなことをするには
defineを使うしかないのでしょうか?
0133軟式PHP
2006/08/09(水) 09:59:22ID:???俺も欲しいなぁとは思ってるんだけどないなぁ。
オブジェクト定数ってのならあるんだけど、多分想像してるのとは違うと思われ。
0134nobodyさん
2006/08/09(水) 10:02:20ID:???if($kakiko=="" || ereg("^([a-z])+$",$kakiko)) error("不正な文字列です");
これじゃだめなんですか?
テストしてみましたがこの処理をスルーしてしまいます・・・。
0136軟式PHP
2006/08/09(水) 10:05:10ID:???大文字・数字の判定がない。あとeregよりpregのほうがいいよ。
if( $kakiko == "" || preg_match('/^[0-9a-zA-Z]+$/',$kakiko) )
0137nobodyさん
2006/08/09(水) 10:20:01ID:???ありがとうございます
自分で英数字と言っておいて入れ忘れたのはなんともお恥ずかしい限りです。
で、試しにやってみたんですが・・・書き込み成功してしまいました・・・orz
何もおかしいところはないと思うのですが・・・なぜでしょうか・・・
0138軟式PHP
2006/08/09(水) 10:35:21ID:???kakikoという変数から察するに掲示板の書き込みの内容?
スペース・改行・タブ等が入っていたら上のじゃスルーされるよ。
タブ、改行、スペース対応版。記号入ってたら駄目だけど('A')あとは改造してくれ。
if( $kakiko == "" || preg_match('/^[0-9a-zA-Z\r\n\s\t]+$/',$kakiko) )
0139nobodyさん
2006/08/09(水) 10:43:36ID:???0140nobodyさん
2006/08/09(水) 11:09:37ID:???echo("{$foo}");
とやったらフォーが出力されますよね?
では、
define("FOO","フォー");を
echo("")という形を使ってフォーと出すにはどうしたらよいのでしょうか?
echo FOO;でもちろんできますが、どうしても("")の中に入れたいんです。
変数と同じ要領で("{FOO}")をやってみたけどだめでした。
よろしくおねがいします。
0141軟式PHP
2006/08/09(水) 11:15:03ID:???とかじゃだめなん?
0142nobodyさん
2006/08/09(水) 11:16:14ID:???そうです掲示板です。
こういう場合空白とか改行についても入れないと駄目なんですね・・・。
勉強になりました。
しかしまたもスルーされてしまいました・・・orz
検索したりと色々試行錯誤していましたら
if(!preg_match("/[\x80-\xA0]/",$com)) { error("不正な文字列です"); }
これで自分の思い通りの結果になりました。
色々とご教示いただきありがとうございました。
0144nobodyさん
2006/08/09(水) 11:31:37ID:GlwbD+0Ypg_connect("host=%s", HOST);
もしくは
$host = HOST;
pg_connect("host=${host}");
でいいと思うけど
■ このスレッドは過去ログ倉庫に格納されています