トップページ⇒php
1001コメント314KB

【PHP】質問スレッドpart21【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/08/27 18:00ID:???
・PHP全般の質問スレです。
・新規質問の方は上げてください。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
0002nobodyさん04/08/27 18:01ID:???
過去スレ
【PHP】質問スレッドpart20【php】
http://pc5.2ch.net/test/read.cgi/php/1091774679/
0003nobodyさん04/08/27 18:04ID:???
関連スレ
Pear
http://pc5.2ch.net/test/read.cgi/php/985665522/
【PHP】Smarty【Template】
http://pc5.2ch.net/test/read.cgi/php/1047225437/
0004nobodyさん04/08/27 18:28ID:???
( ̄о ̄:)
0005nobodyさん04/08/27 19:51ID:9bd9wFW/
phpize ってコマンド打つと、ファイル無いよ?エラーが一杯出るんだけど、
PHPインストール時になんか特別なことしなきゃならなかったんでしょうか?
0006nobodyさん04/08/27 19:58ID:PYuyKaM7
質問です

$com = str_replace("[",",",$com);
echo $com;

これをすると化けてしまいます。
ereg_replaceでもmb_ereg_replaceでも化けます。
"["のようなメタ文字を置換しても化けないようにできないでしょうか?
0007nobodyさん04/08/27 20:10ID:???
$comに何が入ってるかは教えてくれないんだね
0008nobodyさん04/08/27 20:12ID:tl2C9eKh
皆様、携帯で画像を表示させるときにどうやって振り分けてますか?
正規表現でUserAgentを見てあらかじめ登録しておいたサイズに
照らし合わせてリサイズするという方法しかないんでしょうか?
どうか教えてください!偉い人!
0009nobodyさん04/08/27 20:12ID:???
>>7
「教えてください。お願いします。」だろ?
0010604/08/27 20:18ID:PYuyKaM7
>>7
$comには

[名前] 明日野 条
[住所] 日本関東

みたいな情報が並んでいます。
0011nobodyさん04/08/27 20:48ID:MFxEexml
>>10
$comの文字エンコーディングは?
0012nobodyさん04/08/27 20:49ID:???
>>8
それしかありません。
一部携帯は、画面サイズとかヘッダ情報からとれますが、
3キャリア対応だと無理ですね。

まあ、新しい機種が発売されるたびに更新する必要があって面倒ですが。
0013nobodyさん04/08/27 23:04ID:s0PWqgRO
PHPって携帯に対応してます?
0014nobodyさん04/08/27 23:06ID:???
>13
対応してるも何も、サーバーで動いてるやん
0015nobodyさん04/08/27 23:11ID:???
>>13
もう少し勉強して出直して来い
0016nobodyさん04/08/27 23:29ID:???
require_once("lib/hoge_lib.php");
require_once("lib/hoge_db.php");

この形でファイルを読み込んでいるのですが、サーバによってはシングルクオートで
括らないと、ファイル読み込み出来ない事があります。それぞれのファイルに定義して
あるユーザ関数を、一つのファイルにまとめて実行してもエラー出力はないのですが、
この場合、どういったところから洗い直していけばよいのでしょうか?

PHP4.3.8 / configureオプション, php.iniは、基本的に同じ設定で、エラーレベルは
E_ALL, display_errors = Onになっています。
0017nobodyさん04/08/27 23:38ID:VDNxy0Ve
PHPのサンプルってPerlと比べて圧倒的に少ないですけど、
その辺皆さんはどうやって補完していますか?
0018nobodyさん04/08/27 23:43ID:???
いや、多いだろ
0019nobodyさん04/08/27 23:46ID:???
っつーかperlが無駄に多いだけだろ。
0020nobodyさん04/08/27 23:47ID:???
夏も終わりに近づいて最後のラッシュか (´ー`)
0021nobodyさん04/08/27 23:47ID:???
Perlを脳内変換してPHPにする
0022nobodyさん04/08/28 00:04ID:???
出会い系の掲示板作ろうと思うんだが
メールアドレス確認の時に携帯宛に
http://〜略/index.html?03169785436
とかあるっしょ?
それはどういう意味なんでつか?
ただ乱数発生させてるだけなんですかね?
0023nobodyさん04/08/28 00:06ID:???
>>22
業者は去れ
00242204/08/28 00:07ID:???
漏れ学生なのに業者だったのか_| ̄|○
0025nobodyさん04/08/28 00:15ID:???
http://〜略/index.html?03169785436
↑みたいなアドレス使って何したいの?
これは業者が携帯番号掴む為によくやる手法だが
それしたいってのならまるっきり業者じゃん
00262204/08/28 00:29ID:???
>>25
なるほど、これれは電話番号掴むのにやるのか・・・
本人確認したい時皆はどうします?
0027nobodyさん04/08/28 00:48ID:???
臭い業者は去れ
0028nobodyさん04/08/28 00:54ID:???
SJISで掲示板を書いたのですが、サーバー以降の際、MB関数の設定が変わって
AddSlashesをif()式で囲んでいなかった為、無駄にslashが追加されてしまい、その部分だけ
「表」「パ」などの文字が文字化けしてしまいまい、
逆にその文字列にstripslashesを実行しても変化がありませんでした。

どのようにすれば元に戻せるのか、教えていただけませんでしょうか。
0029カポコン04/08/28 01:23ID:???
mb_eregi_replace ()
でも使いなさい。
0030nobodyさん04/08/28 01:31ID:???
pear Flexy ってキャッシュありましたっけ?
Smartyはあるのになぁ
0031nobodyさん04/08/28 01:58ID:???
今までのPHPの質問まとめてみたぽ
http://2ch.lock.client.jp/data/034697845289.html
0032nobodyさん04/08/28 02:45ID:???
>>26
サービス契約者以外が知ることのない、
IDとPassの組み合わせを使って認証&同定する。
# 固有番号もあてになんねぇしな。

0033nobodyさん04/08/28 08:51ID:XkJS6oW1
メール送信の時どの関数使います?
mail、mb_send_mail、imap_mailがありますが
あと、CCとBCCってなんだっけ
0034nobodyさん04/08/28 08:59ID:???
>>33
それぞれのマニュアルを読むとそんな質問は出てこない気がするんですが....
まだ読んでないのならこの機会に熟読されることをお勧めします。
CC・BCCについては「メール CC BCC」で検索すれば答えが見つかると思います。
00353304/08/28 09:24ID:???
ありがとございます
関数分かっても文の書き方がわからないぽ_| ̄|○
00363304/08/28 09:35ID:XkJS6oW1
論理値 = imap_mail(送信先,タイトル,本文,[追加ヘッダ,CC,BCC,リターンパス]);
これでメールが送信できるのかどうか
0037nobodyさん04/08/28 10:34ID:???
(・∀・)サァ!!
0038nobodyさん04/08/28 11:45ID:???
特に必要性が無い限り面倒だからmb_send_mail()にまかせっきりだ
0039nobodyさん04/08/28 12:04ID:imkrnG7F
PHPの文字コードをシフトJISでブラウザに読み込ませたいんだけど
メタで指定しても優先順位が拡張子が最初なのでどうしてもEUCで読み込んでしまいます。
もちろんHTMLならシフトJISで読み込みます。
これをPHPでも最初からシフトJISで読み込む方法はないでしょうか?
なぜシフトJISなのかというと携帯で表示させたいのです。
だからデータベースからPHPまではEUCでそこからシフトJISに変換後
ブラウザに表示させるといった感じです。
どうかアドバイスよろしくお願いします。
0040nobodyさん04/08/28 12:06ID:???
(;´Д`)
0041nobodyさん04/08/28 12:20ID:???
>>39
あんた今まで何学んだんだ?
一から勉強し直しだなw
0042nobodyさん04/08/28 12:21ID:???
(・∀・)サァ!!
0043nobodyさん04/08/28 12:30ID:imkrnG7F
>>41
単純な問題なのでしょうが、テンパっていて何も思い浮かびません。
納期間近なのでよろしければ方法を教えてください。
0044nobodyさん04/08/28 12:37ID:???
まるてぃばいと関数をつかうのオススメ?
0045nobodyさん04/08/28 12:38ID:???
テンパるのは構わんが問題を簡潔に分かり易く伝えてくれ
てか本職ならそれぐらい分かれ
00464404/08/28 12:38ID:???
m、よくわからん"?"がついてしまったorz
0047nobodyさん04/08/28 12:43ID:???
>>39>>43
つーか、質問の内容がよく分からんのだが
そのまま納期を迎えてみたら?

そのまえにな、まともな回答キボンヌならソースくらい提示しろ糞が!
0048nobodyさん04/08/28 12:46ID:???
>>41
マニュアルのmb_ 関連見れば、3分で解決するようなことだと思うんだけど。
0049nobodyさん04/08/28 12:59ID:imkrnG7F
わかりにくくて申し訳ないです。。単純にPHPファイルをブラウザで開いたときにシフトJISで開きたいのです。
PHPの場合メタでシフトJISにしててもEUCで開きますよね?だから開いたとき文字化けしてるのです。
方法ありますか?
0050nobodyさん04/08/28 13:01ID:???
>>43
同業者として悲しくなるので、今すぐ転職してください。
0051nobodyさん04/08/28 13:02ID:???
<?PHP
header('Content-type: text/html;charset='シフトJIS');
?>
をHTMLの先頭にする。
0052nobodyさん04/08/28 13:04ID:???
真性厨房かと思ったら仕事かよ。
世も末だ。
0053nobodyさん04/08/28 13:06ID:???
えー?こんなレベルでも仕事ってできるんだあ
0054nobodyさん04/08/28 13:19ID:???
>>53
えー?できるよ。おれショッピングカート作れないほど低レベルだけど、月50近くあるよ。
00553904/08/28 13:24ID:imkrnG7F
>>51
できたーー!!こんな単純なことだったのか!
あなたたちはほんとにすごいね〜
みんなの知恵が重なったときに力って発揮されるもんだね
本当にありがとう!

>>53
どの部分かが長けてれば仕事にはなるよ
0056nobodyさん04/08/28 13:27ID:???
重なってない
分かってなかったのはあんただけだから
0057nobodyさん04/08/28 13:30ID:bA6FLPcw
この前ショッピングカート作った。
0058nobodyさん04/08/28 13:31ID:imkrnG7F
>>56
そっか|Д`)
まあ良いじゃんわからないときは助け合いで!
すごい良いスレだよね〜
0059nobodyさん04/08/28 13:34ID:???
>>54-55
お前らな、500円やるから他職逝けと
プログラマってのはな、もっと神聖としてるべきなんだよ
得意げな顔して何が、「どの部分かが長けてれば仕事にはなるよ」だ
お前、プログラマを絶対舐めとるちゃうんかと

まあお前らド素人は、せいぜい今のうちに余生を楽しみなさいってこった
0060>>5904/08/28 13:47ID:imkrnG7F
俺は専門のプログラマじゃないよ
営業、マーケティング、製作とマルチにやってる
そしてプログラマを舐めてるつもりもない

ここはわからない部分を質問して教えてもらうスレじゃないのか?
>>51さんが教えてくれて俺は救われた
2ちゃんという掲示板の存在意義はここにもあるのでは?
0061nobodyさん04/08/28 13:52ID:Mb7EMv7r
漏れはアマグラマでつが、この板に来てもよろしいでつか?
0062nobodyさん04/08/28 13:57ID:v9ahrS8w
CGIを探してくれるスレが見つからんので・・・

http://wa-ka.net/mash/sozai/yakumo/index.html

↑のような、シンプルな一言掲示板をインラインフレームを使わずに
htmlページに貼り付けたいのですが。
そんなCGI無いですか?
0063nobodyさん04/08/28 14:03ID:bA6FLPcw
> 2ちゃんという掲示板の存在意義はここにもあるのでは?

煽られるのも叩かれるのも2ch
0064nobodyさん04/08/28 14:06ID:???
>>60
答えられるような聞き方をしろってこった
0065nobodyさん04/08/28 14:09ID:???
>>62
>CGIを探してくれるスレが見つからんので・・・
検索かけたら直ぐ見つかったが?

【CGI】こんなCGI探してますver.14
http://pc5.2ch.net/test/read.cgi/hp/1087986364/
0066nobodyさん04/08/28 14:20ID:v9ahrS8w
>>65
アリガトウゴザイマシタ。サッソクケンサクスレイッテキマス。
0067nobodyさん04/08/28 15:25ID:B6xIg3wk
clearstatcache について質問です。

file_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 が
必要なる記述を見つけました。

続く
00686704/08/28 15:27ID:B6xIg3wk
そこでスクリプトを以下のように書き換えて実行しました。

clearstatcache(); // ←追加
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=6804/08/28 15:35ID:???
あ、このスクリプトを続けて実行すると、二度目は ファイルがある と返してきます。
0070nobodyさん04/08/28 15:52ID:???
exec('make_test');
この辺りの詳細が欲しい
00716704/08/28 16:05ID:???
>>70
DBにアクセスして、その内容を編集したファイルを出力するものです。
出力ファイル名は、上記スクリプト内でチェックしているものと一致しています。
さらに、各 file_exists の前に、デバッグ用に system('ls') を追加してみたところ、その出力には目的ファイル名の
存在が見て取れます。
にもかかわらず、file_exists は false を返すのです。

また >>69 にもあるように、2度目の実行では file_exists は true を返しているようです。
0072 ◆.jC7ANgFY. 04/08/28 16:29ID:???
手がないと思ったらこんな関数とか作ってみればいかが。

function file_exists2($filename) {
return (boolean)glob($filename);
}

安全を考えるなら検索するファイル名を制限しなければならない。
globは"*"とかに対応した関数だから。

function file_exists2($filename) {
return !preg_match('/[\*\{\}\?]/', $filename)
and (boolean)glob($filename);
}

00736704/08/28 16:30ID:???
あー、すみません。
ええと、実は上記スクリプトは、もっと大きなスクリプトの一部分なんですが、ここに公開した部分だけで
動かすとうまくいくみたいです・・・
ごめんなさい。

ただ、元のスクリプトでも、該当部分でやってることは上記スクリプトと全く同じなんですけどね。
>>71 で書いたexec('ls') を挿入した話は、元のスクリプトの方でやってます。
exec('ls') で存在確認できるファイルが、file_exsits では false になってしまうという問題は
依然として解決できません。

とにかく、これからもくもくと実験します。
スレ汚しすみませんでした。

ところで、コマンドラインから実行する場合と apache から実行される場合とで、挙動が違ったりするってことは
ありますか?


>>72
実はこの部分はわりと頻繁に実行されるところなので、できるだけシンプルな処理にしたいです。
でも、どうにもならなくなったらそのアイディア頂戴します。
ありがとうございます。
0074 ◆.jC7ANgFY. 04/08/28 16:39ID:???
apacheから実行されると、というよりかセーフモードで実行されると
パーミッションとしては許可されていても開けない場合があるから注意。
0075nobodyさん04/08/28 16:41ID:???
>>60
おまいの言ってる事は概ね正しい。

で、おまいは何のスペシャリストなのよ。
自分でコード書いてるようだが、納品とか言って人様に収める仕事をやってるようだが、
ちゃんと責任の持てる品質に仕上がったか?
言ってることと行動が重なってないぞ。
00767304/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() を追加したのですが、
それでも上記問題が解決しないのです。
00777304/08/28 16:44ID:???
>>74
apache からの実行時に、ファイルを開いたり作成したりを問題なく行えることは、スクリプトのほかの部分で
実績があるので問題ないと思います。
ありがとうございます。
0078nobodyさん04/08/28 17:28ID:???
規模が大きくなりそうなので
オブジェクト指向で書こうと思います。
まだ出たばっかりのPHP5を使うのがいいか、
PHP4で書くのがいいのか、どっちでしょう。
またPHP4で構築→PHP5用に後から書き直し、
なんてことにならないでしょうか?
0079nobodyさん04/08/28 18:11ID:bA6FLPcw
PHP4→PHP5は、書き直し必須です。
オブジェクト指向で書くならなおさら。
0080nobodyさん04/08/28 18:26ID:???
すいません、PHP関連ライブラリのインストールについてなんですが、
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について全くわからないので、
質問も的をはずしているかもしれませんが、
教えていただけないでしょうか?
00818004/08/28 18:38ID:???
PHPは4.3.8でソースからインストールしています。
0082軟式PHP04/08/28 18:38ID:???
PHP Screwでもインスコしようとしてるんかな。
0083nobodyさん04/08/28 20:26ID:jL6OGaFR
正規表現で$enameに格納されてる者の語尾が「たん」「ちゃん」「くん」「さん」の場合と
それ以外の場合とを振り分けたいのですが、以下の通りソースを書いたところ
うまく作動しません。どのように直したらよいですか?

if (preg_match( "/.たん/|/.ちゃん/|/.くん/|/さん./", $ename ) ) {   
 print "OKです"; // 一致した場合
}else{
 print "呼び捨てはやめてください";
}
0084カポコン04/08/28 20:35ID:???
>>78:
 PHP5の予約語もおさえてから、取り掛かる事オススメ。
>>80:
 aclocal: `configure.ac' or `configure.in' is required
  install-shを探し、
  Makefile.inをautomakeで作れた?
0085nobodyさん04/08/28 20:45ID:???
>>83
ひどいな。。。
patternの書き方が致命的におかしい。
マニュアルのパターン構文を熟読されたし。
0086nobodyさん04/08/28 20:51ID:PMoKUUmE
>>83
"/(たん|ちゃん|くん|さん)$/"
0087カポコン04/08/28 20:59ID:???
>>78:
 PHP5の予約語もおさえてから、取り掛かる事オススメ。
>>80:
 aclocal: `configure.ac' or `configure.in' is required
  install-shを探し、
  Makefile.inをautomakeで作れた?
0088nobodyさん04/08/28 22:52ID:vl2m4F3+
ttp://php.s3.to/data/dl.php?dl=chskin
ここの掲示板に2chみたいにスレ一覧をつけるには、どこをどうしたらいいのでしょうか?
教えてください。お願いします。
0089nobodyさん04/08/28 23:10ID:???
>88
知るか
0090nobodyさん04/08/28 23:17ID:???
>>88
機能を付け加えるのって結構面倒な作業なのよ。
で、そういうのが好きな人たちが集まってそうなスレがあるから
そっちの方がいいんじゃないかな?
オイラは見てないし、今でも機能してるかどうか分からないけど
「丸投げ」でこの板を検索すれば見つかるんじゃないかな。
0091nobodyさん04/08/29 00:03ID:???
>>88
おまえの頭をとっかえる。
てか、自分でやろうとして行き詰ってから質問しにこいよ
0092nobodyさん04/08/29 00:05ID:AyQVtsJd
$ename = preg_replace( "/.(さん|君|殿)$|.()$/" , "様", $ename );

$enameの語尾に「さん」「君」「殿」がついている場合は「様」に置換。
それ以外は語尾に「様」つけて、必ず「○○様」という様に変換するように
したいのですが、↑のソースですとうまくいきません。
どのように変えたらよいですか?



>>86
ありがとうです。でも、質問の仕方を間違ってました。
のでもう再び質問です。丁寧に回答なさってくれたのにすいません。
0093nobodyさん04/08/29 00:16ID:???
>>92
$ename = preg_replace( "/(さん|君|殿|様)$/" , "", $ename )."様";
0094nobodyさん04/08/29 01:20ID:AyQVtsJd
>>93
なるほど、ありがとうございます。助かります。

$ename = preg_replace( "/(さん|君|殿|様)$/" , "", $ename )."様";
この場合ですと、$enameに格納されているものが「さん」「君」「殿」「様」
だった場合でも「様」に変換されてしまいますよね・・・
例えば$enameに格納されているものが「さん」だった場合、「さん様」
となるようにするにはどうしたらよいですか。

何度もすいませんがよろしくお願いします。。
0095nobodyさん04/08/29 01:25ID:???
>>94
プログラミングセンス無さ杉
$ename = preg_replace( "/(君|殿|様)$/" , "", $ename )."様";
0096nobodyさん04/08/29 01:30ID:???
>>94
ああ、"さん"って名前の人が居た場合か
それならこっちだな
if($ename != 'さん') {
$ename = preg_replace( "/(さん|君|殿|様)$/" , "", $ename );
}
$ename .='様'
0097nobodyさん04/08/29 01:42ID:???
正規表現についてはスレ違いだと思うが。
後方参照使えばええやん。
$ename = preg_replace("/(.*)(さん|君|殿|様)$/", "$1様", $ename);
00989704/08/29 01:46ID:???
シクジッタ。
00999704/08/29 01:46ID:???
更にしくじった_| ̄|○
$ename = preg_replace('/(.*)(さん|君|殿|様)$/', '$1様', $ename);
0100nobodyさん04/08/29 02:00ID:???
>>97
(.*)とか$1付けんでも普通に
$ename = preg_replace('/(さん|君|殿|様)$/', '様', $ename);
でええやん?
0101nobodyさん04/08/29 02:08ID:???
>>100
バカは黙ってろって
■ このスレッドは過去ログ倉庫に格納されています