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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん04/10/05 17:36:38ID:???
・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
0809nobodyさん04/10/27 15:31:07ID:???
>>806
1.telnetでlocalhostの25番Portに接続
2.接続できたらSMTPコマンドで送信テスト

これも問題ないようであれば原因はqmailじゃないと思うよ
0810nobodyさん04/10/27 15:34:21ID:???
>>808
×2段目の最初
○1段目の一番右
0811nobodyさん04/10/27 16:24:33ID:???
Apache moduleのとき、safe_mode On に何の意味があるのか教えて。
スクリプトファイルのオーナーuidとhttpdの実行uidが違う場合に
激しく不便なんだけど。
0812nobodyさん04/10/27 16:28:15ID:???
レンタルサーバーぐらいにしか使わないからoffにしとけよハゲが。
0813nobodyさん04/10/27 18:56:54ID:8mNdDRME
質問です。

PCREで、正規表現側に日本語文字列を使うとき、みなさん、どうしていますか?
マッチさせるテキストが日本語の場合は問題ありませんが、
正規表現に文字クラスを使うと、日本語の文字が1バイト文字の2文字として解釈されて困っています。

UTF-8を試してみたのですが、改善されませんでした。
おそらく既出だとは思うのですが、過去ログはすでに倉庫行きで見れません。

よろしくお願いします。
0814nobodyさん04/10/27 19:00:29ID:8mNdDRME
ちょっと表現がおかしかったので訂正します。

>マッチさせるテキストが日本語の場合は問題ありませんが、
これは、マッチさせるテキストは問題を引き起こさないという意味で、
正規表現が日本語の場合は、テキスト側のコードが何であっても問題が起こりました。

よろしくお願いします。
0815nobodyさん04/10/27 19:08:50ID:???
>>802
メールを使わないものとしてコンパイルされたphpじゃないの?

>>813
mb_* 系の正規表現関数の話なの?
081680204/10/27 19:50:02ID:???
>>815
関数一覧にmail()関数がなくなるようなインストールの仕方って、
どんなのなんですかね・・・。

http://people.paperclip.com.pe/jaguar/writeups/mailerror.php
ここを見て、qmailの方が後にインストールされた場合は
そんなこともあるから、PHPを再ビルドしろ(合ってますかね?)
という旨書いてあったので

make clean
make
make install
したのですが状況は変わりませんでした。

mail関数は標準関数なのに・・・。
0817nobodyさん04/10/27 20:11:41ID:???
>>816
apache止めてからやった?
081880204/10/27 20:11:44ID:???
orz・・・

./configure からやり直したらmail()関数が使えるようになりました。
qmail をインストールした後にconfigureしないと、
mail()関数は有効にならないようです。

お騒がせしました。
0819nobodyさん04/10/27 20:24:16ID:???
apacheの問題であってphp全く関係なかったな
逝け
082080204/10/27 20:28:24ID:???
apache関係ないです。
コマンドライン起動のPHPです。
0821nobodyさん04/10/27 21:53:39ID:mWarabBu
phpってエロサイトに多いね。
0822 04/10/27 23:58:58ID:???
エロは進化への糧だね
0823nobodyさん04/10/28 01:19:45ID:???
実践ハイパフォーマンスMySQL読んでたら
Yahoo!がPHPとMySQL使ってる事例が結構出てきた。
普通に大規模サイトで使えるんだね。
0824nobodyさん04/10/28 01:28:18ID:???
YahooってMySQLなのか・・。
でも入れてるデータって何なの?
更新のほとんど無いカテゴリの情報?それとも頻繁に更新があるヤフオク?
0825nobodyさん04/10/28 02:20:44ID:???
PHP5を使っていてE_STRICTで開発したいのですが、
PEARやSmartyを使うと大量にエラーが発生してしまいます。
外部のライブラリに手を加えずに、エラーを抑制して、
自分の書いたものにだけE_STRICTを適用することはできるのでしょうか?
0826nobodyさん04/10/28 02:55:06ID:???
>>824
最初に使ったのはYa!FINANCEのサイト。
使うべきところと使うべきでないところをきちんと判断し、
使うべきところで如何に適正に使うかを述べている。
0827nobodyさん04/10/28 03:25:25ID:???
>>826
何言ってんだお前
0828nobodyさん04/10/28 03:56:29ID:vepR/sO0
DAOでSQL書くときフィールドをきっちり指定しまつか?
豆にやってたメンバがやたら増えてわけわかんなくなるは
名前に規則性がないから判別つかんわ・・・
全部
SELECT * FROM でやっていいでつか?
パフォーマンスおちるかなぁ
0829T04/10/28 04:46:02ID:d4m97dka
PHP+MySQLでウェブアプリを作成中です。
バージョンはPHP4.2.2、MySQL3.23.55です。

mysql_query()で2つのテーブルAとBのいくつかのフィールドを同時に
更新したいのですが、いろいろ試してみても方法が見つらず困ってます。

まず、mysql_query()では一度に一つのクエリーしか実行できないですよね?
で、各テーブルを別個に更新するクエリーAとクエリーBをそれぞれ順番に
mysql_query()で実行したとして、クエリーAが成功した後、
万一クエリーBが失敗した場合に、クエリーAの更新をキャンセルすることは
できないでしょうか?
MySQLのバージョン4あたりからCommit./Rollbackとかが使えるように
なってるらしいんですがMySQLのバージョンアップは考えておらず...
最初のクエリーの実行を一時的に保留にして、両クエリー成功時のみ更新を
反映させるなんて方法はないものでしょうか?

苦しまぎれにUpdate構文で2つのテーブルを内部結合して一発で更新、
なんて方法も試してみましたが、これもエラーに。
この方法もやっぱりムリなんでしょうか?

こういうケース、皆さんはどう処理されているのでしょう?
ちょっとMySQL板寄りの質問かもしれませんが、PHPのコードでなんとか
できる部分があればどうぞお知恵をお貸しください。
よろしくお願いいたします。
0830nobodyさん04/10/28 06:06:27ID:???
>>827
824以前も嫁
0831nobodyさん04/10/28 07:25:46ID:???
>>829
http://pc5.2ch.net/test/read.cgi/db/1096838301/178
0832 ◆.jC7ANgFY. 04/10/28 17:13:27ID:???
>>829 ロックすればヨシ
0833 04/10/28 18:10:14ID:???
file.txtから読み込み、ある一部のDATAを取り出し、
条件の下、別の配列に格納しようとします。

例えば、Fileから読み込み格納した配列が
(A,B,5,D,1,A,B,A,B,10,23,A,40,A,B,C)
と並んでるとします。

この中から
DATA(10,23,40)を別に取り出したい(数字10以降から表れるn=3個の数字)
時は、どう考えたら良いのでしょうか。
0834nobodyさん04/10/28 18:31:34ID:???
>>833
(A,B,5,D,1,A,B,A,B,10,23,A,40,A,B,C)
と並んでる配列の中から数字10以降から表れる3個の数字を
別に取り出せばいいんじゃないかな?

つか何を悩んでいるのかさっぱり判らん。
0835nobodyさん04/10/28 18:58:57ID:???
log.logに一行ずつログが書き込まれていくログファイルがあって、たとえば

太郎
花子
太郎
次郎
三郎
太郎
・・・

のようになっているとして、「太郎」を含む行だけを消したいです。(消したところは詰める)
fopen("log.log","w+")で開いて、forを用いpreg_matchで該当するモノを「""」に置き換えて消しては
fwriteでlog.logに書き込むという方法を使っていますが、ログが何メガとでかくなっていると
なんとなくデータが吹っ飛びそうで怖いです。
安全に、速く消していける組み方ってどんなもんでしょうか?
083683504/10/28 19:03:17ID:???
自分の書いた方がいいですね

$list=file("log.log");
$logfile = fopen("log.log","w+");
flock($logfile,LOCK_EX);
for ($i=0;$i<count($list);$i++) {
if(preg_match("/太郎/",$list[$i])) {$list[$i]="";}
fwrite($logfile,$list[$i]);
}
fclose($logfile);
0837nobodyさん04/10/28 19:17:48ID:???
 $list=file("log.log");
から
 flock($logfile,LOCK_EX);
の間で書き込みがあったら壊れるな
0838nobodyさん04/10/28 19:28:04ID:???
>385
テンポラリファイルでやれば途中で止まっても大丈夫。

$fpt = fopen('tmp', 'w');
$fp = fopen('log.log', 'r');
flock($fp, LOCK_EX);
while($buf = fgets($fp, 1024)){
 if(!preg_match("/太郎/", $buf)) {
  fwrite($fpt, $buf);
 }
}
fclose($fp);
fclose($fpt);
copy('tmp', 'log.log');
0839nobodyさん04/10/28 20:19:32ID:???

$Test="_POST";

$$Testと指定して$_POSTにしformの中身を持ってきてるんですが
$$Testのなかみを無理やり、

$$Test="abc";
echo("$$Test");

としてもechoの結果Arrayとでて中身が表示されんです
"abc"を$$Testと関連付けするためにはどうしたらええんでしょうか?
0840nobodyさん04/10/28 21:55:43ID:???
win2000でPHPとMysqlとanhttpdをインストールしたんですが、
mb_convert_encodingが使えませんorz
どこか設定ファイルを書き換えれば使えるんでしょうか。。
0841nobodyさん04/10/28 22:18:32ID:???
マニュアルちったぁ読め。
http://www.php.net/manual/ja/ref.mbstring.php
0842nobodyさん04/10/28 22:19:23ID:???
>>840
設定ファイルの中に書いてあるよ。
mbstring や mb_ で php.iniやphp.ini-distの中を探してみる。
さらにマニュアルのマルチバイト文字列関数のところを熟読すると、
先々でつまらないミスをしなくて済む。
0843nobodyさん04/10/28 22:32:08ID:???
>>841-842
サンクスコです。。早速やってみます
0844 04/10/28 22:42:27ID:???
mbは拡張扱い
0845nobodyさん04/10/28 23:46:09ID:kVaGnhG6
こんにちは。

ちょっと自分ではどうしようもないので質問させて頂きます。
index.phpがあり、その中から、http://host.dom/print.cgiを呼び出し、且つ
その表示結果を変数に入れたいのですが、可能でしょうか?
アドバイスでも何でも結構ですので、頂ければうれしいです。
0846 ◆.jC7ANgFY. 04/10/28 23:57:30ID:???
>>845
一応こういう風にすればできる。
$var = file_get_contents('http://host.dom/print.cgi');
0847 ◆.jC7ANgFY. 04/10/29 00:02:49ID:???
>>839
$Arrayと出ていませんか?ちゃんと細かく出力結果は書くべきですよ。
それはさておき、これは(${$Test})として変換されたのではなく('$' . $Test)
として変換されたからこうなったのです。代入はうまくいきます。
最後の出力行をecho $$Test;又はecho "${$Test}";に変えてみてください。
0848 ◆.jC7ANgFY. 04/10/29 00:09:08ID:???
>>843 その場だけ使うのであればdl関数が便利。
0849 ◆.jC7ANgFY. 04/10/29 00:20:57ID:???
>>835
チェックしてないけどこれもいけるかも。
$fn = fopen('log.log', 'r+');
if (flock($fn, LOCK_EX)) {
$fn2 = fopen('log.log', 'r+');
while ($buf = fgets($fn, 4096))
if (strpos($buf, '太郎') === false) fwrite($fn2, $buf);
}
ftruncate($fn2, ftell($fn2));
fclose($fn2); fclose($fn);
0850 ◆.jC7ANgFY. 04/10/29 00:24:28ID:???
>>838
テンポラリファイルを固定してしまうならばテンポラリファイル
にもロックかけたほうがいいかも。whileループ中に多重起動した
らテンポラリファイルが消えるし追加もよくわからなくなる。

>>849
ftruncateはifブロックの中入れるべきだった…
ほかは大丈夫。な、はず。たぶん、
085184304/10/29 01:10:07ID:???
動いたありがとう(TT

>>848
cgi-binのperlスクリプト用datファイルはshift-jisで、ホームディレクトリ側のphpファイルはUTF-8なんで困ってました。
幸い鯖の方はmbに対応してたんですけど、やはりローカルでも同じコードで確認できないと。。
jcode.phpとかではどうもうまくいかなかった・・・。
0852nobodyさん04/10/29 01:40:58ID:???
>>851
鯖がmbstring対応してなくても、有志がつくったmbstringエミュレータなんてのも存在する
085384504/10/29 07:13:25ID:???
>>846
おはようございます。
お返事遅くなってしまって失礼致しました。

上記関数で、無事値を取ることが出来ました。どうもありがとうございました。
file_get_contents()なんてあるんですね。とても勉強になりました!

085480004/10/29 09:54:59ID:???
昨日の800です。

言われた通りunixODBCとFreeTDSとlibiconvをインストールしました。
いざPHPでodbc_connectを使用してみようとすると、
Fatal error : Call undefines function: odbc_connect() .....
と言われてしまい動きません。

odbc関数を使用するにあたってPHP側の設定でしなければいけないことはなにがあるんでしょうか?
是非お願いします
0855nobodyさん04/10/29 11:20:26ID:fJt1IS4+
>>800
これ読んだうえでの質問か?
http://jp.php.net/manual/ja/ref.odbc.php
085680004/10/29 12:41:08ID:???
リンク先の文章読みましたけど意味がわかりませんでした。
結局Linux + PHPからWindows + SQL Serverにはアクセスできないんでしょうか?
0857nobodyさん04/10/29 12:49:19ID:???
>>856
君には。
0858nobodyさん04/10/29 13:06:38ID:???
>>857
ワロタ
085980004/10/29 13:18:23ID:???
ここは質問スレッドじゃないんですか?
本当に困っているので教えていただきたいのですが・・・。
0860nobodyさん04/10/29 14:08:41ID:???
PHP4.3.9でmysqli拡張サポートを利用したいのですが、
./configure --with-out=mysql --with-mysqli=/path/to/mysql_config
としても有効になりません。
ちなみにPHP5.0.2ではうまくいきました。

PHPのマニュアルを読むと、
http://www.php.net/manual/ja/ref.mysqli.php
> mysqli拡張サポートはMySQL 4.1.2以上で動作するよう設計されています。

と、書いてあるだけで、PHPに関しては特に何も書かれていないのですが…。
PHP4.xで利用する方法はあるでしょうか?

環境:FedoraCore2+MySQL 4.1.7+PHP4.3.9
086186004/10/29 14:13:15ID:???
2行目の./configureのオプションは、--without-mysql …のtypoでした。
0862nobodyさん04/10/29 14:19:17ID:???
>>860-861
釣り?

一応マジレス。
without-mysqlしちゃうとmysql無効になるので、
mysql使いたいならwith-mysqlにしなければならない。

詳しくは、./configure --help|grep "mysql"

マニュアルよく読め。
086386204/10/29 14:21:12ID:???
激しく勘違い。
>862は無かったことにしておいて下さい。
0864 04/10/29 14:31:48ID:???
ここは隔離板なので、期待はしないほうがいい
PHPがマイナーな事もあるが。
0865nobodyさん04/10/29 14:41:30ID:???
PHPで2chのIDみたいにランダムな文字&数字はどうやってできますか?
よろしくおねがいします。
0866nobodyさん04/10/29 14:47:53ID:???
>>865
http://jp2.php.net/manual/ja/function.mt-rand.php
一番下まで読め。
0867 04/10/29 14:48:54ID:???
>>865
一般にはMD5を使うことになるのかな
関数「md5」の欄参考
0868nobodyさん04/10/29 14:56:23ID:???
>>860
RHL9+PHP4.3.8でMySQL付属(PHPのバンドルではない)の
新旧クライアントライブラリ使ってmysql/mysqli両方とも使ってるけどな。
マニュアルの説明に従っただけで特に何もして無いよ。
実験段階の頃のmysqliとそのころのPHPでも問題はなかった
(多少の問題はあったが、動いていたということ)
086986804/10/29 15:01:40ID:???
ごめん。バージョン確認したらPHP5.0だった…
多分実験段階で動かしてたのもPHP5のalphaとか正式版以前のものだわ。
0870 04/10/29 15:03:13ID:???
>>869
処刑決定・・・
087186004/10/29 15:08:15ID:???
>>862
こやつめ…ハハハ…(AA略

>>867
32文字固定になってしまうので、>>886に載ってるサンプルがよろしいかと。

>>868-869
おお!と思ったのもつかの間、やっぱりだめでしたか。
何が原因ですかねぇ。
0872nobodyさん04/10/29 15:12:20ID:???
886 よ、サンプルよろ。
087386804/10/29 15:18:45ID:???
>>871
原因というか、
http://www.php.net/manual/ja/function.mysqli-connect.php
のようにmysqliのメソッドの記述のあたりをみても、
PHPの対応バージョンがPHP5となってることから使えないと思う。
だからPHP4で使った/使えた記憶が微かにあるのだが、これは完全に思い違いと思われる。

#PHP4/5もMySQLもApacheも、インストールしてる奴が微妙に1つ前のばっかりだ..orz
087486504/10/29 15:25:38ID:???
うーん。よくわからないです@MD5
2〜3行で簡単に作れますかね?
087586004/10/29 15:26:59ID:???
>>873
ああなるほどw
まだ、使う前なのでそこまで見ていなかった。
どうせなら、導入部分に書いといてくれたらいいのにね。
対応していないということがはっきりしたのですっきりしました。
どうもありがとう。
0876nobodyさん04/10/29 15:32:41ID:???
>>874
MD5って32文字の0123456789abcdefの文字の羅列だぞ
md5();で出たと思う
087786504/10/29 15:45:31ID:???
もしよろしければ$hogeにランダム文字を入れて書き込んでいただけないでしょうか
0878nobodyさん04/10/29 16:03:21ID:???
$hoge = rand();
0879 04/10/29 16:08:08ID:???
$rand = mt_rand(100000,999999);
$rand = base64_encode($test);
echo $test;

OK?
0880 04/10/29 16:09:29ID:???
>>879 ×

$rand = mt_rand(100000,999999);
$rand = base64_encode($test);
//echo $test;


encode($test)って一体・・・orz
0881 04/10/29 16:10:52ID:???
あー
base64_test($rand);
と脳内変換してくれ
0882nobodyさん04/10/29 16:19:39ID:???
mt_srand((double)microtime()*1000000);
$hoge = md5(uniqid(rand(),1));
0883nobodyさん04/10/29 22:09:16ID:???
Perlの配列のような使い方って出来ませんでしょうか?
フォームの値が”みかん、りんご、ばなな”として
それを変数”fruit”に代入します。perlだと

@fruit=("みかん,りんご,ばなな");
print "$fruite";

としたら結果表示が「みかんばななりんご」
と出来たと思うのですが、PHPのやり方がよくわかりません。。
0884nobodyさん04/10/29 22:17:23ID:???
>>883
何をやりたいのかいまいちよくわからんが、

$arr = array("みかん","りんご","ばなな");
print join("", $arr);

ってことか?
088588304/10/29 22:20:38ID:???
>>884
はい、そういう事なのですが、出力結果は「Array」とだけ表示されてしまいます。
下記のように記述しているのですが。。(フォームの値を取得しています。)

<?
$fruit = array('$fruit01','$fruit02','$fruit03');
print ($fruit);
?>
0886nobodyさん04/10/29 22:23:11ID:???
>>885
だから join だって
0887 04/10/29 22:28:23ID:???
中身知りたいのなら
print_r($fruit);
088888304/10/29 22:28:56ID:???
>>886
すみません、質問自体が馬鹿でした・・。
要はこういう事です。

■フォームのチェックボックスより選択
・好きな果物は?
みかん($fruit01)りんご($fruit02)ばなな($fruit03)

「確認ボタン」をクリックすると確認画面が現れて下記のように表示されている

好きな果物:(チェックした果物名が表示されている )


上記のような事がしたかったので、果物名を$fruitに代入して
その中身を表示する記述がしたかったのです。
0889nobodyさん04/10/29 23:18:08ID:???
悪いこと言わないから、マニュアルを熟読するかPerlでやるかどちらかを選べ。
Perlでまともな物をかける人間なら、マニュアル読めば絶対理解できる。
保障する。
0890nobodyさん04/10/29 23:28:05ID:???
perlで○○はphpはどうすれば
っていう質問いい加減ウザイ
周りがPHPだから自分も移行ってか?さっさと氏ね
0891 04/10/29 23:33:59ID:???
いいよ、PerlでもPHPでも何でも
知りたいなら質問すればいいけど、
自分でも調べてね
0892nobodyさん04/10/29 23:58:10ID:???
本買わない奴多いのかなぁ。
俺は他言語に移るときは必ず本買うけどなぁ。
0893nobodyさん04/10/30 00:01:53ID:???
本買わなくたってマニュアル読めば済むと思うが。
プログラム自体初めてだったら参考書も必要だろうけどね。
0894nobodyさん04/10/30 00:05:04ID:???
ネットにおいてあるマニュアル、親切だし本(゚�听)イラネ
0895nobodyさん04/10/30 00:18:34ID:???
886とか884とか答えそのものを示されても読まないし試しもしない。
そういう馬鹿は質問すんな。リストラされて引きこもってろ。
0896nobodyさん04/10/30 01:33:39ID:???
$image = imagecreatefrompng("./puyo/w_01.png");
imagepng($image);

こう書いたんですが、

臼NG

としか表示されないんですがどうしてでしょうか?
鯖はXREAで、GDライブラリも最新版のものが入っていたはずです。
0897 04/10/30 01:53:54ID:???
配列$array.Key 4.5.6を合計したい(valueは当然数字が入ってる)んだが、上手く行きません
0898nobodyさん04/10/30 02:10:16ID:???
>>896
HTTPヘッダ。
0899nobodyさん04/10/30 06:57:43ID:???
>>886
join()なんか使うな
implode()使え
0900nobodyさん04/10/30 07:07:04ID:???
>>899
あーあ、マニュアルチェックしてから書けばよかったのに・・・

http://www.php.net/manual/ja/function.join.php
> join() は implode() の 別名で、実体はまったく同じものです。
0901nobodyさん04/10/30 07:49:34ID:???
>>896
ココを嫁!
http://www.pahoo.org/e-soul/webtech/phpgd/phpgd-02-02.shtm
0902nobodyさん04/10/30 08:22:01ID:???
>>900
別名でなく本名を使えと言いたかったのでは
0903nobodyさん04/10/30 09:32:45ID:???
>>902
でもjoinならperlに全く同名でほぼ同じ働きの関数があるから、
perlからの移行組なら簡単に理解するんじゃないかと
884や886は思ったんじゃないか?


でもその意図は元質問者には理解されなかったようだけど・・・
0904nobodyさん04/10/30 10:24:48ID:eL+7QS/f
ども。
今PHPでのディレクトリ操作等について勉強中なのですが、

年別フォルダを作成し(今年ならば2004)
フォームに内容等を書き込み日付_101(1030_101,1030_102)というようなファイルを作成して、
そのファイルに変数として内容格納し,それをインクルードさせて一覧表示する。
といったようなプログラムを作成中です。

ディレクトリ、ファイルの作成、変数の書き込みはうまく行ったのですが最新のファイル順に読み込んで表示させるといった部分で詰まってしまいました。
良い方法がないもんでしょうか・・・
0905nobodyさん04/10/30 11:03:48ID:???
わざわざエイリアス使わなずに元の使え、ってことだろ
自慢げにまぬあるのURL晒されてもな・・
0906 04/10/30 11:48:56ID:???
動きゃいいんだよ、動きゃ。
0907nobodyさん04/10/30 12:36:52ID:???
ファイル削除も delete() でいいんだよ!
0908nobodyさん04/10/30 12:37:47ID:X9SzlMJ/
http://script.s16.xrea.com/2ch/
↑の掲示板をサーバー設定EUC環境で設置したいのですが、
具体的にどこをいじればいいでしょうか?
何もしない状態でFFFTPでアップすると書き込んで更新するときに文字化け+
エラーが出ます。
サクラエディタですべてのファイルを、charset="Shit_JIS"を全てcharset="EUC-JP"に変更 且つ
EUCコードで保存してアップすると真っ白の画面が出てくるだけですo(-_-;*) ウゥム…
どうすればいいでしょうかil|l|_| ̄|○|l|li
レス数が900を超えています。1000を超えると表示できなくなるよ。