【PHP】質問スレッドpart21【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/27 18:00ID:???・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
0052nobodyさん
04/08/28 13:04ID:???世も末だ。
0053nobodyさん
04/08/28 13:06ID:???005539
04/08/28 13:24ID:imkrnG7Fできたーー!!こんな単純なことだったのか!
あなたたちはほんとにすごいね〜
みんなの知恵が重なったときに力って発揮されるもんだね
本当にありがとう!
>>53
どの部分かが長けてれば仕事にはなるよ
0056nobodyさん
04/08/28 13:27ID:???分かってなかったのはあんただけだから
0057nobodyさん
04/08/28 13:30ID:bA6FLPcw0058nobodyさん
04/08/28 13:31ID:imkrnG7Fそっか|Д`)
まあ良いじゃんわからないときは助け合いで!
すごい良いスレだよね〜
0059nobodyさん
04/08/28 13:34ID:???お前らな、500円やるから他職逝けと
プログラマってのはな、もっと神聖としてるべきなんだよ
得意げな顔して何が、「どの部分かが長けてれば仕事にはなるよ」だ
お前、プログラマを絶対舐めとるちゃうんかと
まあお前らド素人は、せいぜい今のうちに余生を楽しみなさいってこった
0060>>59
04/08/28 13:47ID:imkrnG7F営業、マーケティング、製作とマルチにやってる
そしてプログラマを舐めてるつもりもない
ここはわからない部分を質問して教えてもらうスレじゃないのか?
>>51さんが教えてくれて俺は救われた
2ちゃんという掲示板の存在意義はここにもあるのでは?
0061nobodyさん
04/08/28 13:52ID:Mb7EMv7r0062nobodyさん
04/08/28 13:57ID:v9ahrS8whttp://wa-ka.net/mash/sozai/yakumo/index.html
↑のような、シンプルな一言掲示板をインラインフレームを使わずに
htmlページに貼り付けたいのですが。
そんなCGI無いですか?
0063nobodyさん
04/08/28 14:03ID:bA6FLPcw煽られるのも叩かれるのも2ch
0065nobodyさん
04/08/28 14:09ID:???>CGIを探してくれるスレが見つからんので・・・
検索かけたら直ぐ見つかったが?
【CGI】こんなCGI探してますver.14
http://pc5.2ch.net/test/read.cgi/hp/1087986364/
0066nobodyさん
04/08/28 14:20ID:v9ahrS8wアリガトウゴザイマシタ。サッソクケンサクスレイッテキマス。
0067nobodyさん
04/08/28 15:25ID:B6xIg3wkfile_exists でファイルの存在確認をして、存在しなかったら exec によりそのファイル生成を行うコマンドを実行し、
再び file_exists でファイルの存在確認をしています。
if(!file_exists('test.txt')) {
exec('make_test');
if(file_exists('test.txt')) {
echo 'ファイルがある';
}
else {
echo 'ファイルが無い';
}
}
else {
echo 'ファイルがある';
}
上記のようにしたところ、exec が成功して目的のファイルの生成が完了しているにもかかわらず、
ファイルが無いと出てきます。
調べたところ file_exists は、その結果をキャッシュするため、続けて実行するときには clearstatcache が
必要なる記述を見つけました。
続く
006867
04/08/28 15:27ID:B6xIg3wkclearstatcache(); // ←追加
if(!file_exists('test.txt')) {
exec('make_test');
clearstatcache(); // ←追加
if(file_exists('test.txt')) {
echo 'ファイルがある';
}
else {
echo 'ファイルが無い';
}
}
else {
echo 'ファイルがある';
}
でも結果は変わりません。
webで調べてみたところ、
http://ns1.php.gr.jp/php-jp/archives/msg05496.html
のような症状を発見し、これと同様のことが起きているものと思われます。
しかしこのMLは、結論が出ることなく話題が終わっています。
PHPのバージョンは 4.3.7 です。
解決策をご存知の方、ぜひ教えてください。
006967=68
04/08/28 15:35ID:???0070nobodyさん
04/08/28 15:52ID:???この辺りの詳細が欲しい
007167
04/08/28 16:05ID:???DBにアクセスして、その内容を編集したファイルを出力するものです。
出力ファイル名は、上記スクリプト内でチェックしているものと一致しています。
さらに、各 file_exists の前に、デバッグ用に system('ls') を追加してみたところ、その出力には目的ファイル名の
存在が見て取れます。
にもかかわらず、file_exists は false を返すのです。
また >>69 にもあるように、2度目の実行では file_exists は true を返しているようです。
function file_exists2($filename) {
return (boolean)glob($filename);
}
安全を考えるなら検索するファイル名を制限しなければならない。
globは"*"とかに対応した関数だから。
function file_exists2($filename) {
return !preg_match('/[\*\{\}\?]/', $filename)
and (boolean)glob($filename);
}
007367
04/08/28 16:30ID:???ええと、実は上記スクリプトは、もっと大きなスクリプトの一部分なんですが、ここに公開した部分だけで
動かすとうまくいくみたいです・・・
ごめんなさい。
ただ、元のスクリプトでも、該当部分でやってることは上記スクリプトと全く同じなんですけどね。
>>71 で書いたexec('ls') を挿入した話は、元のスクリプトの方でやってます。
exec('ls') で存在確認できるファイルが、file_exsits では false になってしまうという問題は
依然として解決できません。
とにかく、これからもくもくと実験します。
スレ汚しすみませんでした。
ところで、コマンドラインから実行する場合と apache から実行される場合とで、挙動が違ったりするってことは
ありますか?
>>72
実はこの部分はわりと頻繁に実行されるところなので、できるだけシンプルな処理にしたいです。
でも、どうにもならなくなったらそのアイディア頂戴します。
ありがとうございます。
パーミッションとしては許可されていても開けない場合があるから注意。
0075nobodyさん
04/08/28 16:41ID:???おまいの言ってる事は概ね正しい。
で、おまいは何のスペシャリストなのよ。
自分でコード書いてるようだが、納品とか言って人様に収める仕事をやってるようだが、
ちゃんと責任の持てる品質に仕上がったか?
言ってることと行動が重なってないぞ。
007673
04/08/28 16:41ID:???>>73
>exec('ls') で存在確認できるファイルが、file_exsits では false になってしまうという問題は
>依然として解決できません。
これは、>>68 スクリプトの最初の if の前に挿入したものでは、exec('ls') の結果には目的ファイルは
含まれておらず、file_exists が false を返すという正しい動作をしています。
その if の中に入って、exec('make_test') が実行された後に挿入した exec('ls') では、その結果に
目的ファイルが含まれていることを確認できますが、その後の if の file_exsits では false を
返します(ファイルは存在するのに false が返る)。
最初は、1つめの if で実行した file_exists の結果がキャッシュされ、2つめの if では現実を即していない
そのキャッシュが結果として返っているらしいという考えから clearstatchahe() を追加したのですが、
それでも上記問題が解決しないのです。
007773
04/08/28 16:44ID:???apache からの実行時に、ファイルを開いたり作成したりを問題なく行えることは、スクリプトのほかの部分で
実績があるので問題ないと思います。
ありがとうございます。
0078nobodyさん
04/08/28 17:28ID:???オブジェクト指向で書こうと思います。
まだ出たばっかりのPHP5を使うのがいいか、
PHP4で書くのがいいのか、どっちでしょう。
またPHP4で構築→PHP5用に後から書き直し、
なんてことにならないでしょうか?
0079nobodyさん
04/08/28 18:11ID:bA6FLPcwオブジェクト指向で書くならなおさら。
0080nobodyさん
04/08/28 18:26ID:???phpizeというコマンドを使うらしいのですが、
コマンドを打つと、
cp: `mkdep.awk' を stat(2) できません: そのようなファイルやディレクトリはありません
cp: `scan_makefile_in.awk' を stat(2) できません: そのようなファイルやディレクトリはありません
cp: `shtool' を stat(2) できません: そのようなファイルやディレクトリはありません
cp: `acinclude.m4' を stat(2) できません: そのようなファイルやディレクトリはありません
cp: `Makefile.global' を stat(2) できません: そのようなファイルやディレクトリはありません
/usr/local/bin/phpize: line 52: /usr/local/lib/php/build/phpize.m4: そのようなファイルやディレクトリはありません
aclocal: `configure.ac' or `configure.in' is required
なんてエラーが出ます。
これらのファイルはPHPインストール時に入るものじゃないんでしょうか?
phpizeについて全くわからないので、
質問も的をはずしているかもしれませんが、
教えていただけないでしょうか?
008180
04/08/28 18:38ID:???0082軟式PHP
04/08/28 18:38ID:???0083nobodyさん
04/08/28 20:26ID:jL6OGaFRそれ以外の場合とを振り分けたいのですが、以下の通りソースを書いたところ
うまく作動しません。どのように直したらよいですか?
if (preg_match( "/.たん/|/.ちゃん/|/.くん/|/さん./", $ename ) ) {
print "OKです"; // 一致した場合
}else{
print "呼び捨てはやめてください";
}
0084カポコン
04/08/28 20:35ID:???PHP5の予約語もおさえてから、取り掛かる事オススメ。
>>80:
aclocal: `configure.ac' or `configure.in' is required
install-shを探し、
Makefile.inをautomakeで作れた?
0086nobodyさん
04/08/28 20:51ID:PMoKUUmE"/(たん|ちゃん|くん|さん)$/"
0087カポコン
04/08/28 20:59ID:???PHP5の予約語もおさえてから、取り掛かる事オススメ。
>>80:
aclocal: `configure.ac' or `configure.in' is required
install-shを探し、
Makefile.inをautomakeで作れた?
0088nobodyさん
04/08/28 22:52ID:vl2m4F3+ここの掲示板に2chみたいにスレ一覧をつけるには、どこをどうしたらいいのでしょうか?
教えてください。お願いします。
0089nobodyさん
04/08/28 23:10ID:???知るか
0090nobodyさん
04/08/28 23:17ID:???機能を付け加えるのって結構面倒な作業なのよ。
で、そういうのが好きな人たちが集まってそうなスレがあるから
そっちの方がいいんじゃないかな?
オイラは見てないし、今でも機能してるかどうか分からないけど
「丸投げ」でこの板を検索すれば見つかるんじゃないかな。
0092nobodyさん
04/08/29 00:05ID:AyQVtsJd$enameの語尾に「さん」「君」「殿」がついている場合は「様」に置換。
それ以外は語尾に「様」つけて、必ず「○○様」という様に変換するように
したいのですが、↑のソースですとうまくいきません。
どのように変えたらよいですか?
>>86
ありがとうです。でも、質問の仕方を間違ってました。
のでもう再び質問です。丁寧に回答なさってくれたのにすいません。
0094nobodyさん
04/08/29 01:20ID:AyQVtsJdなるほど、ありがとうございます。助かります。
$ename = preg_replace( "/(さん|君|殿|様)$/" , "", $ename )."様";
この場合ですと、$enameに格納されているものが「さん」「君」「殿」「様」
だった場合でも「様」に変換されてしまいますよね・・・
例えば$enameに格納されているものが「さん」だった場合、「さん様」
となるようにするにはどうしたらよいですか。
何度もすいませんがよろしくお願いします。。
0095nobodyさん
04/08/29 01:25ID:???プログラミングセンス無さ杉
$ename = preg_replace( "/(君|殿|様)$/" , "", $ename )."様";
0096nobodyさん
04/08/29 01:30ID:???ああ、"さん"って名前の人が居た場合か
それならこっちだな
if($ename != 'さん') {
$ename = preg_replace( "/(さん|君|殿|様)$/" , "", $ename );
}
$ename .='様'
0097nobodyさん
04/08/29 01:42ID:???後方参照使えばええやん。
$ename = preg_replace("/(.*)(さん|君|殿|様)$/", "$1様", $ename);
009897
04/08/29 01:46ID:???009997
04/08/29 01:46ID:???$ename = preg_replace('/(.*)(さん|君|殿|様)$/', '$1様', $ename);
0100nobodyさん
04/08/29 02:00ID:???(.*)とか$1付けんでも普通に
$ename = preg_replace('/(さん|君|殿|様)$/', '様', $ename);
でええやん?
010292
04/08/29 02:36ID:???なんか怪しくねぇか、それ。
$enameが「さん」のみ「殿」のみとかだったら、後ろに「様」をつけて「さん様」「殿様」にして
「Aさん」「B殿」だったら「A様」「B様」にするんだろ。
$ename = preg_replace( "/(.+?)(さん|君|殿|様)?$/" , '$1様', $ename);
0103nobodyさん
04/08/29 02:56ID:???0104nobodyさん
04/08/29 03:00ID:???0106102
04/08/29 03:13ID:???0107nobodyさん
04/08/29 03:14ID:AyQVtsJd>>102さんので出来ました。
本当にありがとうございました
0108nobodyさん
04/08/29 04:22ID:???0110nobodyさん
04/08/29 05:41ID:???1ページにつき1つのPHPファイルで表示するのと、
全ページを1つのPHPファイルで処理するのではどちらが負荷が軽いですか?
掲示板で言うとTOP,書き込みページ,ログを別々のPHPファイルで処理するみたいな
0111nobodyさん
04/08/29 06:24ID:???負荷よりメンテナンス性で考えろ。
分かりやすい、変化に強いコードを書いてそれで重くなったのなら後からチューニングすればいい。
0112nobodyさん
04/08/29 06:37ID:???フレーム切ってブラウザから多重で呼ぶ作りではなく、
メイン1つとメインから複数のサブを関数的にコールする作り
の話なら負荷の差云々は気にするな。
0114112
04/08/29 08:05ID:???「TOP,書き込みページ,ログを別々のPHPファイルで処理する」
に対応する内容ではなかったな…
素のPHPだけの場合だと、分割の方がメモリ占有の部分で
若干負荷が高い。CPU負過の部分では同等。
しかし、そんなもんは微々たる瑣末なこと。
111の言うとおりメンテナンス性を優先
本当に負荷を気にするほどのレベルなら、
PHPでもプリコンパイルされたバイナリの利用、
全体/部分的にPHP以外の採用も検討。
0116nobodyさん
04/08/29 09:28ID:Kc1bBELSphpで "->"って演算子ですか?
$tmp = $row->tmp;
自力で調べてみましたがよくわかりません。
0117nobodyさん
04/08/29 09:40ID:???0118nobodyさん
04/08/29 10:54ID:???0119nobodyさん
04/08/29 10:54ID:W8RVkldu調べる対象すら判らなかったので助かりました。
012080
04/08/29 13:30ID:???すいません。どうすればいいか分かりません。
install-sh が phpのソースのところにあったり、
インストールしたいPecl APCのところにあるのはわかりますが。
0121nobodyさん
04/08/29 13:39ID:???毎週うちにきて、隣で教えてくれると助かるんだけどね。
もと風俗譲の27歳でした。
012280
04/08/29 14:12ID:???意を決してphpizeをviで開いてみる。
「あ、これshなんだ・・・と気付く」
なんか、インストールのときに変なことをやったらしく、
/..../php/build
になるべきところが
/..../php/php/build
になってました・・・。
viでそのままパスを書き換えたらうまくいきました。
こんな対応でいいのか、いまいち不安ですが、一応解決です。
0128nobodyさん
04/08/29 14:36ID:???$_POSTのデータは、中身に数値以外の情報が入ってることが
確定だった場合、何でもかんでもhtmlspecialcharsでエンコードすべきですか?
0129nobodyさん
04/08/29 14:44ID:???0132nobodyさん
04/08/29 15:14ID:cCH4wkwYもうね、馬鹿かど(ry
0133nobodyさん
04/08/29 15:34ID:???あ ふ ぉ か
だからおまいらのアプリケーションは後からコードを観てもエスケープ処理が分散してて完全な対策が保証されなかったり、
最初に全入力値に対してエスケープ処理かけた結果が入力データの同一保持が壊れたりするんだよ。
出力対象に合わせて直前でエスケープ処理しる!
HTML に出力するんなら、直前 (出来ればテンプレート内部) でかけるんだよ。
Smarty なら escape 演算子使え。Flexy ならもっとスマートだ。
0135133
04/08/29 15:46ID:???PHP アプリケーションの質下がり杉。その手の相談も去年より増えた。
最近 PHP でやるって言うと顧客が不安な顔するし。
0139133
04/08/29 16:14ID:???0141nobodyさん
04/08/29 17:13ID:???まぁ人によりけりだろ。
0142nobodyさん
04/08/29 17:38ID:nmd5+dtj0143nobodyさん
04/08/29 18:34ID:???その後、Pecl APC と TurckMMCacheを入れて、
比較してみたので参考まで。
ベンチは手軽さ優先で ApacheBenchです。
(ab -n 500 -c 10)
ソースはそんなに大きくないですが、連想配列使いまくり。
Smarty使用です。
無し: 10.3 #/sec
Pecl APC: 26.3 #/sec
Turck MMCache: 28.2 #/sec
Zendより良いかは分かりませんが、
Turck の webページの比較はホントっぽい。
ttp://turck-mmcache.sourceforge.net/index_old.html
0144nobodyさん
04/08/29 19:28ID:???0146軟式PHP
04/08/29 19:43ID:???0147nobodyさん
04/08/29 20:20ID:???原因がわからず、こまってます^^;
0148軟式PHP
04/08/29 20:36ID:???0149nobodyさん
04/08/29 20:49ID:???↑こんな文字化けです
0150nobodyさん
04/08/29 20:53ID:???0151nobodyさん
04/08/29 20:58ID:???■ このスレッドは過去ログ倉庫に格納されています