1 :
nobodyさん :
04/05/17 17:14 ID:AT+bUkag
2 :
nobodyさん :04/05/17 17:16 ID:AT+bUkag
3 :
nobodyさん :04/05/17 17:16 ID:AT+bUkag
4 :
nobodyさん :04/05/17 17:17 ID:AT+bUkag
PHP5!!
7 :
1 :04/05/17 22:57 ID:???
最近PHP+MYSQLをはじめたというか、プログラム自体初心者にちかいのですが require( 'config.php' ); //$db_host user passのデータ $dname='create'; //データベースname $dtable = 'test'; // テーブルname $fname = 'name'; //フィールドname $data = 'data'; //DATA $db=mysql_connect($db_host,$db_user,$db_pass) or die("error [$db]"); $check=mysql_select_db($dname); if(! $check){ print ("{$dname}を作成しました<br>"); $check=mysql_select_db($dname); } $test = mysql_query("SELECT $fname FROM $dtable WHERE name='$data'"); if (!$test){ mysql_query("CREATE TABLE $dtable ($fname varchar(50) NOT NULL default '')"); print("テーブル作成<br>"); }else{ $rows = mysql_num_rows($test); } if ($rows <= 0 || !$test){ mysql_query("INSERT INTO $dtable ($fname) VALUES ('$data');"); print("レコード作成<br>"); } mysql_close($db); てな感じでデータベースが無ければ作成しテーブルやレコードもなければ作成するというのを試しに作ってみたのですが、 望む結果は得られましたがこんな感じでいいのでしょうか? よい見本などがみあたらず手探りで作ってみたので非常に不安です。 あと、もっと複雑なデータベースを作りたいときに外部のSQLファイルを読み込んで作成とかさせる場合どうしたらいいのでしょうか?
10 :
nobodyさん :04/05/18 06:31 ID:jcKTntda
ショッピングカートを設置しようと思い、
ttp://syokunin.no-ip.org/で配布されてるweb_cart 1.02を落としました。
手順に従って設定して、設置はできたんです。
試しに注文してみたら注文者側には確認メールが届いたんですけど、
こっち(発売側)にはメールが届かないんですよね。。。
よくよく設定ファイルを見てみたら、
メールフロムという箇所しか、メールを設定するとこがないんです。
どうやったら、発売側にメールが届くんでしょうか。。。
どなたか解る方、いらっしゃいましたら、ご教授願います。
>>10 それだけの情報で、ここで解決を求めるのは無理。
然るべき場所にサポート情報を求めるか、誰か雇って解決しる。
>>9 何を作ってるのか・作りたいのかにもよるけど
一般的にはテーブルはあらかじめ作っておくもの
あなたが何を知りたいのかがよくわからないけど
文章から察するにもうちょっとDBをどうやって扱うか、
どういうものなのかっていうのを調べた方がいいような気がする
早起きしたんで暇つぶしにダウンロードして中を見てみたんだけど、 ぱっと見た感じ $mail_fromに設定すれば動くはずだよ。 同じ場所でTo:違いのメールを2通送信しているので片方が届いていれば鯖のメール設定も問題なさそうだし。 ああ、リロードしたら先に書かれてるよ...鬱だ寝よう...
15 :
10 :04/05/18 07:31 ID:jcKTntda
朝から板違いスマソ。。。 サーバーのPHPのバージョンが4みたいなんだけど、 それのせいでしょうか? $mail_fromの箇所をhotmailに設定してみたんだけど、全然届きません。 ウワァァァァァァヽ(`Д´)ノァァァァァァン!
16 :
10 :04/05/18 07:47 ID:???
自己解決しました。
どうやらhotmailのせいでした。。。
プロバイダから割り当てられたメアドで試したところ、
ちゃんとメールが帰ってきました。
板違いすいませんでした。。。
m(_ _)m
>>13 >>14 ありがとうございました。
>>13 ,14
わざわざ個別アプリケーションの内容まで調べて面倒みてやってるのか、、すげぇな。
18 :
9 :04/05/18 13:38 ID:???
>>12 何がつくりたかというかというと、遠い道のりですが最終的にはXOOPSとかみたいなかんじで
使う人があまりDB意識せずつかえるものをつくりたいと
まずは初心者らしく
てはじめにカウンターをとおもい、MYSQL使わないものと使ったものを作り
その後ipとusernameとpassword設定しておけば
データベースやテーブル、レコードなどを自動的に作るようなカウンターにしてみたいなと思い
テーブルやレコードなどがあるか?無い場合の作成はどうすればいいのか?
を調べる意味でつくってみましたが
一般的な方法としてはどんな方法があるのかきになりまして。。
>18 勉強の一環として試しに作ったのであればいいんだけど そのソースを発展させて作り上げていくつもりなら 通常のDBアクセスと、DB構築の処理は切り分けておくべき。 一番無難なのはDB周りの処理を1つまたは複数のクラスとしてまとめて、 DB構築部分は、install/install.phpのようなスクリプトにしておく。 あとは初期化時に直接install.phpを手動で開くようにしてもいいし、 index.phpなどからinstall.phpにLocationで飛ばしてもいい。 XOOPS含め大抵の物はこういった手法でやってるよ。 先人が残してくれてるソースコードを参考にしなきゃ損々。
20 :
名無しさん@お腹いっぱい。 :04/05/18 14:48 ID:w7i8F8Vx
echo $hoge[$i][1]; echo "$hoge[$i][1]"; 上だと値がちゃんと表示されます。 下だとArray[1]表示されてしまいます。 ""で囲った形で値を表示するにはどうすりゃよいでしょうか?!
echo "{$hoge[$i][1]}";
22 :
20 :04/05/18 15:07 ID:???
なるほど。できました。 ありがとうございます。
PHP(コマンドラインではなくwebアプリとして使用)から
外部コマンドを非同期で呼ぶ方法を教えてください。
時間のかかる夜間バッチを、PHPの画面からボタンをクリックして
起動するようなイメージです。
当然バッチの戻りを待つ必要はありません。
環境
RedHat 9 / PHP 4.3.5 / apache 1.3.29
exec() 等で起動したいコマンドを指定すると、起動したコマンドが終わるまで
PHPが待ってしまいますが、どうやったら待たずに、即座にPHPに処理を戻せますか?
調べたところ、下記のようにコマンドの標準出力を /dev/null にリダイレクト
させるとうまくいきましたが、これしかないのでしょうか?
exec("batch.sh > /dev/null");
下記にも似たようなことが書いてありました。
http://ns1.php.gr.jp/php-jp/archives/msg07476.html http://www.php.net/manual/ja/function.exec.php exec("batch.sh &");
ではうまくいきませんでした。
htmlがShift-JISに設定してあって FormからpostでUTF-8の日本語ファイルを選択(ここまでは正常)してsubmitすると$_FILEで取得した日本語ファイル名が空白(NUL)になってしまいます。 なんででしょーか? $_POSTを試してみます。
reloadボタンが押されたらインラインフレーム内に$_POST['reload']を渡して再読み込み させているのですが、再読み込みをするとインラインフレームの中が全画面で表示されてしまいます。 インラインフレームの定義を保持したままでリロードする方法を教えてください。
>>25 ファイル名が空白?ちゃんとファイルがPOSTされてるのは確かなの?
>>26 Javascriptでインラインフレーム内のフォームにPOSTさせるとか
ファイル名はactionで指定していますが何故でしょう、出来ません。 JavascriptからPHPへの受け渡して経験ないんですが、それにしてみます。
target間違えてない?
30 :
25 :04/05/19 13:02 ID:???
>>27 ファイル名の最初が日本語だと「日本語」がカットされます。
例 あいうえお.zip
ポストすると
.zip(2000Pro+IE6)
NUL(OSX10.3+IE5.2)
NUL(OSX10.3+サファリ)
あいうえお.zip(OSX10.3+モジラ)
あいうえお.zip(OSX9.2+IE5.1)
などなど
最初はOS9でPHP作ってたから気が付かなかった...
すいませんでした。。org targetてフレーム名でも指定できるんですね。ありがと
32 :
nobodyさん :04/05/19 14:02 ID:OfngxgLc
連想配列から、キーを元に、キーと値を削除するって事は出来るんでしょうか?
>>32 unset($array[$key]);
34 :
32 :04/05/19 15:49 ID:???
35 :
nobodyさん :04/05/19 16:22 ID:7KZLVZlc
p2をやろうと思いphpを入れました。 入れたパソコンは問題なくp2が動作したのですが 他のパソコンから見ようとするとネットワークパスワードを求められます。 ここが問題なのですが正しいパスワードを入れても認証に失敗します。 環境 windows2000pro / PHP 4.3.5 / IIS5.0 どうすれば他のパソコンから見れるようになるでしょうか?
>>35 お ま え は め く ら か
板違いだボケ
37 :
nobodyさん :04/05/19 16:44 ID:7KZLVZlc
>>35 p2/data/p2_auth_user.phpを一度消して見れ。あと板違い。こういう質問はどこ逝っても嫌われるぞ。
40 :
nobodyさん :04/05/19 16:53 ID:7KZLVZlc
ありがとうございました 以後気をつけます
よろしくお願いします。 csv形式のテキストから一文字ずつ配列に取ってきているんですが、fgetcsvでエラーが出てしまいます. print_r ($csv)とすると 2004,記念の,テスト となり print "$csv[0]$csv[1]$csv[5]$csv[6]"とすると 20,記 となります。 $data = fgetcsv($csv, 10000, ","); にするとえらーがでてしまうのですが、どうやったら$dataに","を抜いた形で配列に入れることが できるんでしょうか?よろしくお願いします。
>>42 よし、とりあえずプログラミングよりも日本語を勉強しよう!
すいません、わかりづらかったですか・・
>>42 そのfgetcsvのときの$csvはファイルポインタなのか?
質問を読む限りそうじゃなさそうだよな...
>>46 恥ずかしげもなくそのレス書く前にマニュアル嫁
$data=file(sample.csv); $lines=count($data) for($i=0; $i<$lines; $i++){ mb_ereg_replace(",","",$data[$i]); }
さっぱりわからん $csvには何が入っているのさ? 質問内容を整理して、マニュアル読んで、ぐぐって、それでもわからんかったら書き込めよ
見てきた、正直すまんかた
マルチバイト文字列関数が使えないPHPを使用してます。 PHPはApacheのモジュールとして動かしてるのでこのマルチバイト文字列関数を /usr/lib/pgsrl.so などのようにコンパイルする事は出来ますか? PHPをソースコンパイルしろってのはナシで。そうするとApacheのコンパイルもsslやらなんだかんだoption付けないといけんので手間が掛かりすぎるからです。 ぶっちゃけマルチバイト文字列関数が使えるRHL9のrpmさえあればいいんすが...
jcode.php使うという手は?
# rpm -Uvh php-4.2.2-17.2.mbsupport.i386.rpm # rpm -qi php-4.2.2-17.2.mbsupport.i386.rpm パッケージ php-4.2.2-17.2.mbsupport.i386.rpm はインストールされていません なんでだ??
>>51 PHPをソースから入れるにはApacheもソースから入れなきゃならんと思っているのに、偽造500ウォン
んで、モジュールのみコンパイルしてインストールすることも可能なはずですよ。
数字に後ろから3桁おきにに「,」をいれたいのですが どうすればよいでしょうか? たとえば「12000」という数字を「12,000」として表示したいです。
質問する前にマニュアル嫁よ 頼むから
59 :
遅くなって申し訳ない1 :04/05/20 10:19 ID:q5E1Ags3
Σ( ̄д ̄;)! #sage忘れ
62 :
nobodyさん :04/05/20 10:52 ID:WaBVWaFV
PHPは「ペー林家パー子」の逆回転文字列結合で合ってますか?
64 :
nobodyさん :04/05/20 12:13 ID:NShBOzWM
PHP普及の原因は、イスラエル・Zend社のマーケティングの成功にある。
@Perlでは別インストールで多くの人が知らないデーターベース利用を標準で使用できるようにし、「データーベースが簡単に取り扱える」というイメージを特に強く植えつけた。
Aウェブサイト作成への特化。例えば、セッション管理がそうだ。
Bソースの隠蔽による著作権保護を可能にした。
データーベースを使いたいが、使い方がわからない。そこに、PHPなら使えるという情報が先に入る。これで、PHPに入った人もかなり多いはず。
PHPの言語仕様はZendに大きく左右される。
二年ほど前、PHPが出始めた頃には、変数のスコープがPerlとまったく同じ仕様だった。
もともと、Perlのソースコードを改編して作成されたPHP。
↓PHPの歴史
http://php.planetmirror.com/manual/ja/history.php PHPには、Perlコードの退行による高速化の意図が言語のいたるところに見える。
マイクロソフトは、オブジェクト指向への対応というのが大義にVB6.0からVB.NETに言語仕様を大幅に変えた。
今後も大きく言語仕様が変わることはないのか?
オープンソースとは言っても、Zend社の
http://www.zend.com/management.php の数人のスタップによって大きく左右される。
再帰的定義とされる「PHP:Hypertext Preprocessor」という名前にも理由がある。これは、要するに、正確には、「Perl Hypertext Preprocessor」としたいところだが、GNUの「GNU is Not UNIX」という再帰的な定義をもじったものだ。
要するに、「GPLのフリーソフトのライセンスには違反していませんよ!」と一つには主張し、また、一つには、「PHP is Not Perl」とでも言って、Zendの社としての姿勢を、先人の「Perl開発者たち」から擁護する意図があったのだろう。
Nではなく、Hなのが、そのための味噌だ!Perl開発者たちは、当然、面白くないはずだ。
PHP信奉者は、六芒星(hexagram)マークのユダヤ教にでも、入信せよ!
…といいつつ、かく言う私も、PHPに乗り遅れまいと必死だが…。(^^;)
>>64 まんま信じる馬鹿が多いから、嘘の中に少量の本当を混ぜる技法は止めとけって...
PHP4.3.1を使っています。 素人ながらオブジェクト指向なコーディングをするように考えていますが、 なるべく単純で、良いお手本となるソースを公開してるところはありますか?
ない
javaから入った方がいいと思われる。
ためになる用語辞典 めくら:目が見えない人 文盲:字が読めない人 明盲(あきめくら):字は読めるが文章が理解できない人
71 :
nobodyさん :04/05/20 16:24 ID:YWvMGF1q
メールフォームを作っていて、 通常のメール送信はできるのですが メール送信を行った後、別のページ(例:thanks.html) へ飛ばしたいのですが、 if (mb_send_mail($To, $MailSubject, $MailMessage, "From:$From")) { header("Location: thanks.html"); } else { echo "$cnf_NgMsg\n"; } これだと下記のエラーがでます。 Warning: Cannot add header information - headers already sent by (output started at /home/***/***/***/index.php:6) in /home/***/***/***/mail/mail.php on line 140 form/index.php にフォームがあり、form/mail/mail.phpへ引数を渡して、 mail.phpでメールを送信している感じです。 このような場合locationを使うのは不適当なのでしょうか?
72 :
71 :04/05/20 16:26 ID:YWvMGF1q
すいません。日本語変でした。 メール自体は送信できるのですが、別ページに飛ばす事ができませんです。。。
73 :
71 :04/05/20 16:35 ID:YWvMGF1q
すいません。自己解決しました。 お邪魔しました。。
まぁなんだ、英単語苦手でした、ってことだな。
77 :
67 :04/05/20 19:08 ID:???
>>74 いきなりPEARのソースを読めと言われてもちょっと…。
必要があればいきなりだろうがおいなりだろうが読むわな。
strrev関数で2バイト文字を正常に反転させるにはどうすればいいですか? 例えば"あひゃ"を反転させ、"ゃひあ"にしたいんですが 現時点では"痰ミあ"となってしまいます。
2バイトごととらないかんわな
http://php.s3.to/chat/ ここにある高速チャットを設置すると以下のようなエラーメッセージが出るんですが
どうすればうまく行きますか?
Warning: session_start(): open(/tmp\sess_7bede8e58cf70ade30189aa799a60b24, O_RDWR) failed: No such file or directory (2) in C:\home\chat.php on line 2
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\home\chat.php:2) in C:\home\chat.php on line 2
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\home\chat.php:2) in C:\home\chat.php on line 2
Warning: Unknown(): open(/tmp\sess_7bede8e58cf70ade30189aa799a60b24, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
最近までPerlでプログラムを組んでいたのですが、今回PHPに乗り換えてみました。 Perlの時に動いていたSuexec機能はPHPでは効いていないようで、PHPから作成したファイル・ディレクトリが全てapacheのデフォルトの権限で作成されてしまいます。 なんとかPHPでもSuexec機能を使うことはできませんでしょうか? 環境は FreeBSD 4.9 Apache 2.0.49+PHP4.3.6+MySQL4+Suexecです。 宜しくお願いします。
pearは単なるクラス群だから いわゆるオブジェクト指向的な プログラミングの参考には それほどならないだろう。
>>83 アプリの使い方は、アプリのところ(最も適した場所)で訊きなさい。
>>84 PHPをApacheのDSOとして組み込んじゃなくて、
CGI版のPHPをsuExecと組み合わせる。
今のバージョンのPHPはデフォルトでCLI版はビルドするけど
CGI版はオプションつけてやらないと生成しなくなってた気がする。
ところで"Suexec機能"って何?
その辺で認識違がある気がしないでもない。
>>83 アプリの使い方は、アプリのところ(最も適した場所)で訊きなさい。
>>84 PHPをApacheのDSOとして組み込んじゃなくて、
CGI版のPHPをsuExecと組み合わせる。
今のバージョンのPHPはデフォルトでCLI版はビルドするけど
CGI版はオプションつけてやらないと生成しなくなってた気がする。
ところで"Suexec機能"って何?
その辺で認識違がある気がしないでもない。
90 :
89 :04/05/20 23:37 ID:???
スマヌ
91 :
vv :04/05/21 02:16 ID:???
レンタル鯖使ってケータイ用サイト作ってます。 が、エンコード方法で困ってます。 やってること: 1 EUCで保存しているテキストファイルを読み込み 2 Shift-Jis変換してEchoで表示させる ということをしたいのですが mb_http_output('SJIS'); とかやってもうまくいきません。 なにか別の方法があるのでせうか?
>>91 echo mb_convert_encoding($str, "sjis", "euc");
とりあえずこれでやれ
それでなんでうまくいかないかは調べろ
てかマニュアル嫁
93 :
91 :04/05/21 05:23 ID:???
94 :
nobodyさん :04/05/21 13:35 ID:9biQDb7u
お取り込み中のところ申し訳ありません。 サイト閲覧者のブラウザー情報のうち、 表示領域の高さを取得することってできますでしょうか? わかるかた、おながいします!
>>94 PHP関係ないだろ。
JavaScriptスレにでも行けば?
まぁ、phpではムリだな。
ブラウザの縦の表示領域に依存するサイトなんか見たくないね。
98 :
nobodyさん :04/05/21 13:55 ID:9biQDb7u
>>99 PHPで色深度検出ってなんじゃそりゃって思ったら、そういう環境変数を吐くブラウザの話じゃねーか
同じことしたいなら環境変数に「表示領域の高さ」吐くブラウザ作れ
でもってその場合もやっぱり板違い
100 :
nobodyさん :04/05/21 14:04 ID:9YHKUH0F
?
JavaScriptで拾ってPOSTすりゃええやん 板違い
102 :
nobodyさん :04/05/21 14:36 ID:fvdu+npM
初めまして、最近PHPを始めました。参照について教えてください。 「$a = &$b;」と「$a =& $b;」は同じと考えても良いのでしょうか? また、同じだとすると何故書き方が二通りあるの?
>>102 細かいことは気にするな。
構文解析の時点で&$b と& $bは同じ扱いになる。
$a=
&
$b
;
と書いても一緒だ。
>>102 動作は同じだけど区別して書いている場合
$a = &$b; は"$bの参照"を渡す
$a =& $b; は"$b"の"参照渡し"
の意味合いを含ませているかも知れん。
>>104 ごめん、意味合いの違いがわかんないw
いやうっすらニュアンスは伝わってくるような気はするんだけど...
微妙だw
106 :
102 :04/05/21 15:55 ID:???
>>103-104 回答、ありがとうございます!では気にしないことにします。
書き方が二通りあるからには生成されるコードが違うのかも?
と気になって仕方がありませんでした。
これで心安らかにコーディングできます。
>>104 これは確かに微妙。だけど言いたいことは何となく…
参照と言わずにアドレスと言え、知ったかが
>>107 PHPはCとは違うので、渡すのはあくまでも
リファレンスであってアドレスではない。
呼び名が違うということだけではなく、
仕組み上でもリファレンス≠アドレスだ。
近隣のCDショップ4店舗の価格比較データベースを遊びで作ってます。 disk-idにはCDを見分けるための番号 priceはそのCDの価格。 shopはいずれかのショップ名(A店,B店,C店,D店) resultは順位 disk_id | shop_id | price | result --------+---------+-------+-------- D151 | shopC | 1720 | 4 D151 | shopB | 1680 | 3 D151 | shopA | 1620 | 2 D151 | shopD | 1590 | 1 D152 | shopA | 2120 | 4 : : 〜 〜 続く
現状はデータベースからの戻り値を配列として格納して $disk_id array([0]=>D151[1]=>D151[2]=>D151[3]=>D151[4]=>D152) $shop_id array([0]=>shopC[1]=>shopB[2]=>shopA[3]=>shopD[4]=>shopA) $result array([0]=>4[1]=>3[2]=>2[3]=>1[4]=>4) とこんな感じになっているのですが、これをphpでテーブルに表示する際 +------+------+------+------+------+ | D151 | shopA | shopB | shopC | shopD | +------+------+------+------+------+ | 2 | 3 | 1 | 4 | +------+------+------+------+ とshopAからDと順に表示するにはどうしたらいいでしょう?アドバイスよろしくお願いします。
+------+------+------+------+------+ | D151 | shopA | shopB | shopC | shopD | +------+------+------+------+------+ | 2 | 3 | 4 | 1 | +------+------+------+------+ こうだ、スンマソ
>>110 データベースからの取り出し方が悪いわな。
shop_id順に並べるならそのように取り出すべきでは?
SELECT * FROM table WHERE disk_id='D151' ORDER BY shop_id;
おお、なるほど。 もしこれを一覧表示にするとなるとしてもSQL文でなんとかなりますでしょうか? +------+------+------+------+------+ | D151 | shopA | shopB | shopC | shopD | +------+------+------+------+------+ | 2 | 3 | 4 | 1 | +------+------+------+------+ | D154 | shopA | shopB | shopC | shopD | +------+------+------+------+------+
>>113 簡単に考えれば、
SELECT * FROM table ORDER BY disk_id,shop_id;
なるでしょ。SQL勉強してごらんよ。面白いよ。でもってここphpスレ
なるほど、ありがとうございました。
最初にAという文字が出てきたときにのみBに置き換えたい(二回目は置き換えない) のですが、どういう風な記述をすればいいのでしょうか? ereg_replaceを用いても、うまくできませんでした……。
>>117 ereg_replace("A(.*)","B\\1",$str);
最初にA
なんせ多次元はいれつがそのまんま戻り値で戻ってくるPHPだからな いろいろ半端だねぇ
122 :
nobodyさん :04/05/22 09:16 ID:FrQVvRLq
マンモス本改訂版(
ttp://www.net-newbie.com/support/pdf2/にpdfファイル有 )において、
3.3 クラスライブラリで汎用化のP137〜P143のサンプルプログラムを自環境で実行させたところ、(ソースの含まれるpdf:
ttp://www.net-newbie.com/support/pdf2/PHP4_Part-2.pdf )
Warning: pg_num_rows(): supplied argument is not a valid PostgreSQL result resource in /home/hoge/public_html/lib/pgselect.inc on line 33
Warning: pg_num_fields(): supplied argument is not a valid PostgreSQL result resource in /home/hoge/public_html/lib/pgselect.inc on line 34
とエラーがでて動きません。
その前の章(3.2 PHPを使ってテーブル内容を表示する)のライブラリに分けないべたなスクリプトはちゃんと動作したのですが。
だいぶ見直してみましたが、エラーのでる原因が掴めません。
助言頂けませんでしょうか。
debianアンダーでapache2.0.49/PHP4.3.4の環境で動作させています。
よろしくお願いいたします。
>>122 pg_num_rowsの引数が有効なリソースじゃないっていうエラー
DBに接続できるてるのは確かなのか?
124 :
nobodyさん :04/05/22 10:26 ID:prWBgoDS
ダウンロードカウンタを設置しようと思って
http://www.csmoon.com/prog/dcnt.html ここにあるサンプルCGIを設置したんだけど
なぜかinternal Server Error が出まくって全然動かない
環境はRed Hat Linux + Apache 2.0.48です
パーミッション、転送法などが原因かな?
だれか教えて!
>>124 たいへん申し訳ありませんが、スレ違いです。
それPerl、ここPHP…。
126 :
nobodyさん :04/05/22 12:15 ID:FrQVvRLq
>>122 です。
>>123 pg_connectは成功してます。たぶん。。。
>>122 であげましたpdfファイルのP134〜P135のスクリプトではpg_num_rowsは動いてます。
多分引数の受け渡しがおかしいような気がするのですが、いろいろやってみてもうまくいかないのです。。。
>>126 pg_query()を実行している行と、エラーがでている行をよぉく見比べるか、いっそ晒してみ。
128 :
nobodyさん :04/05/22 12:50 ID:FrQVvRLq
>>122 です。
pdfファイルからソースをコピペします。
ちょっと長いですがご容赦ください。
【ex2.php】
1 <html>
2 <head><title>Example 2</title></head>
3 <body>
4 <?php
5 require_once("pgselect.inc");
6
7 $sel = new PgSelect;
8 $sel->doSelect("SELECT day AS 年月日, tenki AS 天気, ondo AS 温度, uryou AS
雨量FROM otenki ORDER BY day");
9 ?>
10 </body>
11 </html>
129 :
nobodyさん :04/05/22 12:51 ID:FrQVvRLq
【def.inc】 <?php define("DBNAME", "foo"); // データベース名 define("HOST", ""); // ホスト名 define("PORT", ""); // ポート番号 define("USER", ""); // ユーザ名 define("PASSWORD", ""); // パスワード ?>
130 :
nobodyさん :04/05/22 12:52 ID:FrQVvRLq
【pgselect.inc】 1 <?php 2 /* 3 * 検索結果をテーブル形式で表示する 4 */ 5 require_once("dbconnect.inc"); 6 7 class PgSelect { 8 var $db; // データベース接続ハンドル 9 10 // コンストラクタ 11 function PgSelect() { 12 $this->db = new DbConnect(); 13 } 14 15 // テーブル開始タグの印字 16 function printTableHeader() { 17 print("<table border>\n"); 18 } 19 20 // 列名の印字 21 function printHeader($i, $str) { 22 print("<th>$str</th>"); 23 } 24 25 // データの印字 26 function printData($i, $str) { 27 printf("<td>%s</td>\n",htmlspecialchars($str)); 28 }
131 :
nobodyさん :04/05/22 12:52 ID:FrQVvRLq
29 30 // 検索の実行 31 function doSelect($sql) { 32 $result = $this->db->doQuery($sql); // selectを実行 33 $rows = pg_num_rows($result); // 行数を取得 34 $columns = pg_num_fields($result); // 列数を取得 35 36 $this->printTableHeader(); 37 38 for ($j = 0;$j < $rows;$j++) { 39 if ($j == 0) { 40 print("<tr>"); 41 for ($i = 0;$i < $columns;$i++) { 42 $str = pg_field_name($result,$i); // 列名の取り出し 43 $this->printHeader($i, $str); 44 } 45 print("</tr>\n"); 46 } 47 print("<tr>"); 48 for ($i = 0;$i < $columns;$i++) { 49 $str = pg_fetch_result($result,$j,$i); // データの取り出し 50 $this->printData($i, $str); 51 } 52 print("</tr>\n"); 53 } 54 print("</table>\n"); 55 return true; 56 } 57 } 58 ?>
132 :
nobodyさん :04/05/22 12:53 ID:FrQVvRLq
【dbconnect.inc】 1 <?php 2 /* 3 * PostgreSQLデータベースへの接続を行なうクラス 4 */ 5 require_once("def.inc"); 6 7 class DbConnect { 8 var $dbname = DBNAME; // データベース名 9 var $host = HOST; // ホスト名 10 var $port = PORT; // ポート番号 11 var $user = USER; // ユーザ名 12 var $password = PASSWORD; // パスワード 13 var $con = false; // コネクションハンドル 14 15 function DbConnect() { // コンストラクタ 16 $this->getConnection(); 17 } 18 19 // コネクションハンドルを返す 20 function getConnection() { 21 if ($this->con == false) { 22 return($this->doConnect()); 23 } 24 return($this->con); 25 } 26
133 :
nobodyさん :04/05/22 12:54 ID:FrQVvRLq
27 function doConnect() { 28 // データベースに接続する 29 $constr = ""; 30 if ($this->dbname != "") { 31 $constr .= "dbname={$this->dbname} "; 32 } 33 if ($this->host != "") { 34 $constr .= "host={$this->host} "; 35 } 36 if ($this->port != "") { 37 $constr .= "port={$this->port} "; 38 } 39 if ($this->user != "") { 40 $constr .= "user={$this->user} "; 41 } 42 if ($this->password != "") { 43 $constr .= "password={$this->password} "; 44 } 45 46 @$this->con = pg_connect($constr); 47 if ($this->con == false) { 48 print("データベースに接続できませんでした。理由: $php_errormsg<br>\n"); 49 exit; 50 } 51 return($this->con); 52 } 53
134 :
nobodyさん :04/05/22 12:55 ID:FrQVvRLq
54 // データベースとの接続切断 55 function doClose() { 56 if ($this->con != false) { 57 pg_close($this->con); 58 $this->con = false; 59 } 60 } 61 62 // データベースへの問い合わせの実行 63 function doQuery($sql) { 64 if ($this->con == false) { 65 $this->doConnect(); 66 } 67 @$result = pg_query($this->$con, $sql); // selectを実行 68 if ($result == false) { 69 printf("SQL($sql)の実行に失敗しました。理由: " . pg_last_error($this->con)); 70 return false; 71 } 72 return $result; 73 } 74 } 75 ?>
SQLがダメぽ ("SELECT day AS 年月日, tenki AS 天気, ondo AS 温度, uryou AS 雨量FROM otenki ORDER BY day"); 雨量とFROMの間にスペースが無い あとAS 〜でエイリアス名つけるのはいいけど英字にしといた方が無難
2レス以上になると、テキストでうpしてくれたほうが遥かに見やすい これは単なる荒らしにしか見えん
137 :
nobodyさん :04/05/22 13:19 ID:FrQVvRLq
>>122 です
>>135 元はそう印刷されてましたが直してます。
そのまま書き込んじゃってすみません。
>>136 すみませんでした。
uk.geocities.com/tdwconvmetwbmxkt/ex2.zip
うpしました。
@$result = pg_query($this->$con, $sql); $this->conでは?
キタ━━━━(゚∀゚)━━━━ッ!!
>>138 さん、ありがとうございました。
まったく気がつきませんでした。。。
>>139 作成中のスクリプトには
error_reporting(E_ALL);
これを最初に入れろ。これだけでエラーはずいぶん探しやすくなる。
上記のならUndefined variable : con とNOTICEエラーが出るし。
Noticeエラーoffはよろしくないよ nullの判定ができなくなる
142 :
141 :04/05/22 14:23 ID:???
って、作成中ね 簡単なデバッグ作業として入れろってことか 早とちりスマソ・・・
PHPとDBに関しての質問です。DB接続と切断のタイミングですが、 DB接続>処理A>DBからの戻り値をセット>DB切断 ・ 別処理 ・ DB接続>処理B>DBからの戻り値をセット>DB切断 ・ 別処理 ・ DB接続>処理C>DBからの戻り値をセット>DB切断 この方法と DB接続>処理A>DBからの戻り値をセット ・ 別処理 ・ DB接続>処理B>DBからの戻り値をセット ・ 別処理 ・ DB接続>処理C>DBからの戻り値をセット>DB切断 この場合、どちらがベストなんでしょうか?
訂正 上と下の処理の違いで下の処理では DB接続>処理A>DBからの戻り値をセット ^^^^^^^ これはナシとみなしてください。
>144 両方試して時間測ってみろ 何でも人に聞いてばかりだと進歩しねえぞ
自分的にはDB接続/切断は出来るだけ控えたいので当然下の処理方法になりますが、 PHPが処理中にユーザがブラウザを閉じて処理を強制的に終了する これを多用された時、サーバの負担及びDBの安全性はどうなるのか?という疑問が出たから質問したのです。処理速度はダントツに下の方法なのは当たり前です。 ここで質問したかったのは「安全策と処理のバランス」です。
phpはスクリプト終了時に自動的にmysqlから切断する ていうか、スレ違い
>>143 一応訊いとくけど、上のパターンも下のパターンも
共にひとつのPHPプロセスに処理がまとまってる前提だよな?
単純にはDBのコネクションにはコスト(PCの何らかの資産を使うということ)
が掛かるから頻繁に接続/切断はしない方が良い。それは接続/切断をしない
作りをするとともに、接続を継続しても支障の無い環境も整備するということ。
PHPでは下のような作りをする必要はまず無いが、システムによっては下の
パターンにならざるを得ないケースもある。145に言うとおり自分の頭で
考えられないときは、自分の手で試すことも重要。他人を余り信用はするな。
強制的に終了された時の安全性のためにDBを使うんじゃないのかな 仮に一回の処理毎にPHPレベルで切断しても 処理してる途中に切られる可能性もあるわけで よっぽどクリティカルなシステムでもない限り そこまで気にしなくていいんじゃないかと
>>146 PHPのプロセスは、HTTPコネクションと連動して動いている訳ではない。
特に切断・終了のタイミングの点で。
データベースのロックの解除処理だけは気をつけろ。
151 :
150 :04/05/22 15:25 ID:???
ああ、サーバのHTTPコネクションとは連動してるか。 ユーザがブラウザでアクセスしてる/してないかが HTTPコネクションとは必ずしも連動してない。
153 :
茶番 ◆4JCPHWjCgk :04/05/22 22:27 ID:hmZH94bq
PHPを習うのに、わかりやすい、本やWEBサイトを教えてください。
155 :
茶番 ◆4JCPHWjCgk :04/05/22 22:38 ID:hmZH94bq
>>122 で紹介してるの書籍のまるまるpdfでいいですよー
結局買っちゃいましたが。
すいません。該当スレッドとして適切でなければ誘導 オナガイ 致します。
えと、bbsに書き込みした方のサイトを「HP」という字ではなく、
home.gif なんかのアイコンにしようと思い、弄くっております。
// フォーマット
if($url) $url = "<a href=\"
http://$url\ " target=\"_blank\">".HP."</a>";
となっておりましたので、「HP」の所に
<img src="home.gif" width="11" height="17">
と入れましたら、鯖に解析してやらねぇと言われました・・・ (´Д`;)
ぬーんと思い
<img src=\"cup_ra.gif\" width=\"11\" height=\"17\">
などと斬新な事もしてみましたが、やっぱり鯖に ( ´,_ゝ`)プ と言われ・・・
こんな幼稚園質問で申し訳ありませんが、ご教授頂けないものかとお願いに上がりました。
一々ご面倒とも思いますので、参考場所の手引きでも頂ければ幸いなのですが・・・
宜しくお願いいたします。
なんかふざけた聞き方だな。 つまらんネタまじりじゃなくどうやったかズバリ書けばいいだろうが。
if($url) $url = "<a href=\"
http://$url\ " target=\"_blank\"><img src="home.gif" width="11" height="17"></a>";
ごめん間違えた。
if($url) $url = "<a href=\"
http://$url\ " target=\"_blank\"><img src=\"home.gif\" width=\"11\" height=\"17\"></a>";
あ、ありがとうございます! 微妙に惜しい・・・ 座布団半分って感じだったのですね・・・ さっそくやってみます! o(´ω`*) ありがとうございました! >158 ごめんなさい。 素だった・・・
>>162 エディタは別にどうでもいいけどそのサイトのデザインがすごく綺麗だな。
164 :
nobodyさん :04/05/23 03:22 ID:XXLnBAc7
チェックの結果は以下のとおりです。
http://fol.axisz.jp/php/ を HTML4.0 Transitional としてチェックしました。
192個のエラーがありました。このHTMLは -161点です。タグが 18種類 257組使われています。文字コードは Shift JIS のようです。
lint厨現る。
ファイルの中身を上から順に読んで条件Aに一致するデータを変数xに格納して表示、 ファイルの中身を上から順に読んで条件Bに一致するデータを変数xに格納して表示、 ファイルの中身を上から順に読んで条件Cに一致するデータを変数xに格納して表示、 と複数回ループさせるのと、 ファイルの中身を上から順に読んで条件Aに一致するデータを変数aに格納、 条件Bに一致するデータを変数bに格納、 条件Cに一致するデータを変数cに格納、 最後に変数を順に表示 と一回のループで一度にやってしまうのとどっちが処理は速いのでしょうか。 ちなみに読み込むファイルは150行程度、条件は10個程度で変数は1条件あたり30個くらい使うのですが・・・
>>168 一通りファイルを読む回数が前者だと三回、後者だと一回だから後者の方が速そうだとは思うね。
>>168 ベンチ取れば?
microtime()〜1000回くらいループ〜microtime()
xemacs で php-mode を使っています。 インデント幅を 2から 4に変更したいんですが、どうすればいいんでしょうか? pearのコーディング規約とかも 4 にしなさいみたいなこと書いてあったのに デフォルトはなんで2になってるんだろう。 「emacs php-mode インデント 幅」でググるとなぜか xyzzyの情報ばかり...
172 :
171 :04/05/23 15:33 ID:???
http://itbtech.itboost.co.jp/man/php_man/pear.standards.html に
(defun php-mode-hook ()
(setq tab-width 4
c-basic-offset 4
c-hanging-comment-ender-p nil
indent-tabs-mode
(not
(and (string-match "/\\(PEAR\\|pear\\)/" (buffer-file-name))
(string-match "\.php$" (buffer-file-name))))))
って書いてあるけど、これって書き方の例だよね?
これをそのまま .xemacs.el に書いてもダメだた。
>172 PHPに関連してるようでスレ違いじゃねえか? なぜemacsスレで聞かない?
データベースから順位1〜4($res)と、その順位を取った回数($count)を配列として受けています。 1位〜4位まで1回ずつとったモノであれば配列$resにも1,2,3,4と入るのですが 1位を2回他が2位、3位だとすると配列$resの値が1,2,3となってしまいます。 これが嫌なので配列$resの中に、1から4の中で入っていない数値があった場合に その順位を$resに、$countに0を入れたいのですが中々うまくゆきません。 どなたかアドバイスお願いします。 何の参考にもなりませんが、スクリプトはこんな感じで書いてしまいました。。 for($i = 1; $i < 5; $i++){ if (in_array($i, $res)== false){ $res[] = $i; $count[] = 0; } }
GDをつかってゼロからスクリプト上で 画像を作り、その画像をデータベースに 保存しようとしているのですが、 スクリプト上で作った画像の バイナリデータの取得方法がわかりません。 現在は一度ファイルに書き出して、 それを読み込んでいますが なんかむなしさを感じます。 いい方法が在れば教えてください。
>>175 順位1〜4と、その順位を取った回数と
"その"というところで関連があるのに
何故2次元配列や順位を添字に使った配列にしないのだ?
現状のやり方だと
>1位を2回他が2位、3位だとすると配列$resの値が
期待する$resは{2,1,1,0}か?
データベースから順位の回数を取得するのはどうやっている?
SQLでcountか?
>>175 データベースの使い方がまずいんじゃね?
テーブルとSQLを晒すよろし。
179 :
175 :04/05/23 22:52 ID:???
不可能だということがわかりました。 一度ファイルに出力しなきゃだめなのね。。。
いた違い 失礼して。 disk_id | shop_id | price | result --------+---------+-------+-------- D151 | shopC | 1720 | 4 D151 | shopB | 1680 | 3 D151 | shopA | 1620 | 2 D151 | shopD | 1590 | 1 D152 | shopA | 2120 | 4 SQLは select result, count(result) from disk_DB where shop id = shopA group by result; てかんじです。
phpでグラフを作成するライブラリってみなさん何使ってますか?
イメタグでパーセント使えばいいじゃん
>>176 出力制御関数ってバイナリセーフじゃなかったか?
PHPを使うならやって当然だろうから、既に試しているかも知れんが・・・
ob_start()
(例えば)imagepng($image_res)
ob_get_contents()→DBに登録
ob_end_clean()
とかでできんのかな?
>>179 レス番合ってる?
>>180 やっぱり先日の分か。
板違いなので付け加えなかったんだが、そもそもresultをDBに入力するのがおかしい。
priceが変わるとresultも変えなきゃならんので、resultは相関サブクエリで済ますべきだろ。
disk_DB(disk_id,shop_id,price)
SELECT *,(SELECT count(*) AS result FROM disk_DB WHERE disk_id=T1.disk_id AND price<= T1.price) FROM disk_DB AS T1;
で、count値を0にしたい件だが、resultが必ず1から4までどこかにはある。というのであれば、
disk_DB(disk_id,shop_id,price,result) ※SQLが長くなるのでとりあえずresult有りで
SELECT DISTINCT result,COALESCE(T1.cnt,0)AS count FROM disk_DB
LEFT JOIN (SELECT result,count(result)as cnt FROM disk_id WHERE shop_id='shopA' GROUP BY result)AS T1 USING(result);
こんなん浮かびましたw
>>180 の例だけだと
result | count
-----+------
1 | 0
2 | 1
3 | 0
4 | 1
185 :
184 :04/05/24 00:13 ID:???
あ、そうそう。 resultというのがpriceの価格順という意味ならサブクエリで済ますべきと思っているので、 resultが別の意味であるなら、入力(カラム)は必要です。
186 :
_ :04/05/24 00:46 ID:???
>>182 ( ゚Д゚) ポカーン
そういう事聞いてるんじゃないだろう。
まぁ
>>182 は質問の作り方が悪かったな。
PHP-users にでも投げてみたら?
>>184 ベリーサンクスコ!あと板違いすいません。
作成当初のスタンスはDBに不足点があってもPHPで補えるだろうなと思っていたんですが、実はDBの設計て
とても重要だったんだということを思い知りました。
184さんの意見を参考にDB設計から見直す必要あり、と感じた今日この頃。
てかSQL文なげーw
188 :
nobodyさん :04/05/24 01:49 ID:XP231UgD
質問です。 「0」を文字として認識させることは出来るのでしょうか? つまり、 ----- if("0"=="000"){} //これをfalse if("0"=="0"){} //これをTrue ----- な感じです。
>>188 if("0"==="000"){} //false
if("0"==="0"){} //true
>>189 ありがとうございました。
初歩的な質問でした。
懺悔です。悔い改めるです。
jj
>>181 俺も簡易的にイメタグやテーブル使ったりするな。
テーブルはブラウザで見え方が違うので厄介ではあるが。
JpGraphは色々あって便利なんだけど、
改造しようとソースに手を出すと嵌るので、
欲しいグラフの種類が少なくて固定できる
(値じゃなくて形がね)のなら、自分で作った方が楽。
HotScriptにもいくつか転がってる。
195 :
nobodyさん :04/05/24 19:04 ID:nTbKpLsJ
PDFlibに関する質問です(環境はWinXP+PHP4.3.6)。 PHP4.3.6からPDFlibのバージョンが5.03(PDF 1.4)にアップグレードしていますが、 以前は、 $enc = mb_internal_encoding(); $txt = chr(254).chr(255).mb_convert_encoding("日本語のしおり","UTF-16",$enc); pdf_add_bookmark($pdf, $txt, 0, 0); というコードで日本語のしおりが表示できたのですが、PDFlibが新しくなってからは、 Fatal error: PDFlib error: [2602] PDF_add_bookmark: Code page '932' not supported というエラーで落ちてしまうようになりました。 Dosプロンプトで作成しているので、usモードにして再作成してみましたが、 状況は変わりませんでした。 対処法をご存知の方、ご教授願えませんでしょうか?
196 :
gh :04/05/24 20:17 ID:???
素朴な質問なんですけど、 file_get_contents 関数と file_put_contents 関数は 読み込み・書き出しの時ファイルロックしているのでしょうか?
197 :
nobodyさん :04/05/24 22:44 ID:XP231UgD
質問です。 配列に項目名が入っています。 ----- $array = array("食べ物", "野菜", "ワイルド系", "キャベツ"); ----- で、これを ----- $array = array(">食べ物", ">>野菜", ">>>ワイルド系", ">>>>キャベツ"); ----- と、項目名の前に、「>」を"配列番号+1"個付加したいのですが、 どのようにすればいいのでしょう。
>>197 項目名の前に、「>」を"配列番号+1"個付加するようなスクリプトを書いてください。
制御構造を使っても、配列関数を使っても、好きな方法で構いません。
$arr = array("食べ物", "野菜", "ワイルド系", "キャベツ"); for ( $i=0; $i<count($arr); $i++ ) { $arr[$i] = str_repeat('>', $i+1).$arr[$i]; } print_r($arr);
>>199 さん
ありがとうございます。
>>198 さん
str_repeatという存在を知りませんでした。
というか、PHP関数の全てを把握し切れていません。
やはり、覚えるしかないのでしょうか?(そんな気がする)
>>200 別に、str_repeat使わずとも簡単に出来るし、
あれだけ整備されたマニュアルが提供されているのだから、
経験積めば意図する関数があるかどうか雰囲気的にわかる。
>>199 、あーC言語っぽい書き方だね、とてもPHPやってますっていう
スクリプトじゃない。本物ならこう書くだろう。
<?php
$slash = "<";
$str = $slash;
$arr = array("食べ物", "野菜", "ワイルド系", "キャベツ");
foreach($arr as $key => $value):
$arr[$key] = $str.$value;
$str .= $slash;
endforeach;
print_r($arr);
?>
この方がPHPらしくないか?
つーか高速だし分かりやすい。
経験よりも才能。いじょ。
おっ珍しくカポコン神が降臨なされたな。 PHPで配列を扱う場合はfor < while <foreach の順で速く動作する。 更に関数を使わず文字列結合の演算のみで処理を終わらせている点。 点数付けると100点満点だわ。 しかも最後に大事なのは才能っていってる部分が カポコンファンの漏れにはたまらない。 これならstr_repeatがサポートされてないPHP3でも動作する罠、 さすがは神。ところで神様とこのHP最近更新滞ってるから こんなところでパンピー相手せずに速く更新きぼんして下さい!
らしいけど冗長で無駄な書き方しかできない才能乏しいやつに見える
負け犬の遠吠えに見えるから無視に限るな。 でもカポコンが頭がいいのはPHP理解した人間になら分かる。 ※関数を使うプログラムより関数を使わないプログラムの方が優秀である。 これ定説ね。天才かどうかは微妙だけど。早速HP見てきます。
$arr = array('食べ物', '野菜', 'ワイルド系', 'キャベツ'); for($i=0;$i<count($arr);$i++){ $leftarrow.='>'; $arr[$i]=$leftarrow.$arr[$i]; } print_r($arr);
>>205 はいはい才能乏しいですよ。
じゃー僕以上のスクリプト書いてもらえます?
自分には才能以外の要素は無いんで。
199にアドバイス付け加えるんなら、テストに使うなら
print_rよりvar_dumpを使う事をオススメしとこう!
209 :
207 :04/05/25 02:57 ID:???
あっ。右向きに変更したんだった。変数名直すの忘れてたYO
仕上がったな・・・。 <?php $leftarrow = '>'; $str = $leftarrow; $arr = array("食べ物", "野菜", "ワイルド系", "キャベツ"); foreach($arr as $key => $value): $arr[$key] = $str.$value; $str .= $leftarrow; endforeach; var_dump($arr); ?>
211 :
207 :04/05/25 03:04 ID:???
>>206 >※関数を使うプログラムより関数を使わないプログラムの方が優秀である。
ここで言う関数とはPHPの関数のこと?
PHPで高速かどうかが問われる場面など ないと断言しておく
カポコンが自分を絶賛しているスレはここですか?
釣られ杉 質問どうぞ
どうみても自演でしょ 反論は要らないんでカボコンさんとやらは巣に戻って下さい
放置しろよ。また出てくるだろ。
>>204 >PHPで配列を扱う場合はfor < while <foreach の順で速く動作する。
これってマジですか?
forは処理前に初期化、ループ時に条件判定・前処理 whileはループ時に条件判定 foreachはループ時に要素内のポインタ移動 下に行く程ループ時の処理が軽いって事じゃねーの?
>>219 成程、そういう事なのですね。今までwhile優先で時々for、という感じでこの2点のみを
使ってて、正味foreachの存在自体を忘れてました。。
配列を処理するときはforeachが有用とマニュアルにも書いてあったと思うがな。 つーか、連想配列の場合だとforeachを使わんと何かと面倒じゃね。
俺forループばっか使ってたよ
誰かc-boardのPHP版作ってる人って居るの
自分しか弄らないスクリプトなら自分の見やすい(書きやすい)書き方でいいんじゃね? 俺はCからプログラミング覚えたからfor使ってる。
>>221 while(list($name,$value) = each($array));
当方、いつもこんな書き方ばかりしてたんですよ。
whileに較べてforは遅い、とだけ小耳に入れた時に「じゃぁforeachも遅いのかな?」と
勝手に思い込んでいた節が有りまして。
Cっぽい書き方でもいいんじゃない? 俺はCの標準関数っぽいのが揃ってたからPHPを使い出したという経緯があるから Cライクな記述をしてる
俺も以前はPHP3でも動くように
>>225 みたいに書いてた。
今はforeachでやってます。
ぶっちゃけどっちでもよいよ 気になるやつはPHPのソース追うなり ベンチ取るなり気の済むまでやってくれ 重箱の隅穿り返すような論議は他で頼む
>>228 いいじゃねぇかYO
処理速度(効率)やコードの見易さなど、、
十人十色いろいろあって宗教じみた話になるかも知れんが、
他の人のやり方を聞くのも、たまにはあっていい。
色んな書き方できるのがPHPだし 複数人が関わる開発じゃなければ自分に合った書き方がベスト
foreach は、配列のコピーを作るので一番遅いんじゃなかった? 公式ページのマニュアルかなにかに書いてあったような気がする。 だから俺は for で回してる。
foreach文が採用された細かいバージョン(4.3.1みたいな)と str_repeatが採用された細かいバージョンをキボン。
早さとか気になるほどは変わらんだろ 好きに書けばいい
>forは処理前に初期化、ループ時に条件判定・前処理 >whileはループ時に条件判定 >foreachはループ時に要素内のポインタ移動 で処理が進むならforeach文の方が速いだろ。 配列扱うのにループのたびに初期化なんてしてたら効率悪すぎ。
>>234 試してみると大分違う。
require_once 'Benchmark/Timer.php';
$leftarrow = '>';
$str1 = $str2 = $str3 = $leftarrow;
$arr1 = $arr2 = $arr3 = array();
for ($i = 0; $i < 2000; ++$i) {
$arr1[] = 'a' . str_pad($i, 5, '0', STR_PAD_LEFT);
$arr2[] = 'a' . str_pad($i, 5, '0', STR_PAD_LEFT);
$arr3[] = 'a' . str_pad($i, 5, '0', STR_PAD_LEFT);
}
$timer =& new Benchmark_Timer();
$timer->start();
$timer->setMarker("Benchmark for 'foreach'");
foreach ($arr1 as $key => $value) {
$arr1[$key] = $str1.$value;
$str1 .= $leftarrow;
}
$timer->setMarker("Benchmark for 'for'");
$max = count($arr2);
for ($i = 0; $i < $max; ++$i) {
$arr2[$i] = $str2.$arr2[$i];
$str2 .= $leftarrow;
}
reset($arr3); $timer->setMarker("Benchmark for 'while--list-each'"); while (list($key, $value) = each($arr3)) { $arr3[$key] = $str3.$value; $str3 .= $leftarrow; } $timer->stop(); echo $timer->getOutput(); 結果 -------------------------------------------------------------- marker time index ex time perct -------------------------------------------------------------- Start 1085465264.67439000 - 0.00% -------------------------------------------------------------- 'foreach' 1085465264.67453300 0.00014281272888184 0.01% -------------------------------------------------------------- 'for' 1085465264.70273000 0.028197050094604 2.24% -------------------------------------------------------------- 'while--list-each' 1085465265.05475400 0.35202407836914 27.93% -------------------------------------------------------------- Stop 1085465265.93488100 0.880126953125 69.82% -------------------------------------------------------------- total - 1.2604908943176
結果 -------------------------------------------------------------- ずれてたので marker time index ex time perct -------------------------------------------------------------- Start 1085465264.67439000 - 0.00% -------------------------------------------------------------- 'foreach' 1085465264.67453300 0.00014281272888184 0.01% -------------------------------------------------------------- 'for' 1085465264.70273000 0.028197050094604 2.24% -------------------------------------------------------------- 'while--list-each' 1085465265.05475400 0.35202407836914 27.93% -------------------------------------------------------------- Stop 1085465265.93488100 0.880126953125 69.82% -------------------------------------------------------------- total - 1.2604908943176 100.00% --------------------------------------------------------------
何度もすまん 02.24% foreach 27.93% for 69.82% while(list() = each()) ってことで、10倍以上の差が出る。
思ってたよりも明確に差が出てて驚き
勉強になった ありがとう
$max = count($arr2);
for ($i = 0; $i < $max; ++$i) {
$arr2[$i] = $str2.$arr2[$i];
$str2 .= $leftarrow;
}
の部分だけど、
>>199 はfor文内でcountを使ってたから
もっと遅くなっていただろうな。
逆にforを使ったほうが早くなるようなケースってあるだろうか
ごめん、数値の見方わかんないんだけどforeachが一番早かったってことだよね
perctの%は掛かった時間なのかな whileやforの条件チェックよりも、foreachの配列チェックの方が早いんだね。 whileはlistかeachのどっちかがボトルネックなのかな
単純なコードの2000回のループでもこんだけ差が出るんだな 俺もこれからまめにベンチとってみよう
よくわからんけど、コレ置いときますね。 <?php require_once 'Benchmark/Timer.php'; $timer =& new Benchmark_Timer(); $timer->start(); $timer->setMarker("Benchmark for 'for'"); for ($i=0; $i<10000; $i++) loop_for(); $timer->setMarker("Benchmark for 'forearch'"); for ($i=0; $i<10000; $i++) loop_foreach(); $timer->stop(); echo $timer->getOutput(); function loop_for() { $arr = array('食べ物', '野菜', 'ワイルド系', 'キャベツ'); for ($i=0; $i<count($arr); $i++) $arr[$i] = str_repeat('>', $i+1).$arr[$i]; unset($arr); } function loop_foreach() { $slash = "<"; $str = $slash; $arr = array("食べ物", "野菜", "ワイルド系", "キャベツ"); foreach($arr as $key => $value): $arr[$key] = $str.$value; $str .= $slash; endforeach; unset($arr); } ?>
>>240 ウチの結果だと
36.58%
24.29%
39.07%
でforが最速と出たんだがwwww
>>247 >※関数を使うプログラムより関数を使わないプログラムの方が優秀である。
一部の香具師によって、否定されていたがある意味正解。
whileはループでは条件判定だけだから
ループ処理では最速なんだろうけど、これが配列になると
キーが関係してくるから結果的に色々な関数を扱わざるおえない。
foreachを使った方がいいって事なんだろう。
whileは、私は代入ぐらいに使おうと思います。
やっぱりfor()は初心者向きだよな。分かりやすいけど。
ウチの環境 foreach 0.07% for 32.69% while 25.84% 違うねー
カポコンファンに転職
つーかさ、あれだよ、速さが気になるならPHP選ぶな、と
あーC言語っぽい書き方だね、とてもPHPやってますっていう スクリプトじゃない。本物ならこう書くだろう。
経験よりも才能。いじょ。
じゃー僕以上のスクリプト書いてもらえます? 自分には才能以外の要素は無いんで。
>>252 それ読み方違うっての
32.69% foreach
25.84% for
だ
お前らちゃんと試してから語れよ?
horeta(・∀・)!!
>>260 Stopが含まれてないYO!
シッカリ前文を読め!!
本物ならこう書くだろう。
263 :
240 :04/05/25 16:38 ID:???
>250 ん、こっちは、 PHP 5.0.0RC3-dev (cli) で試したんでそのせいだった。 改めて PHP 4.3.6 (cli)での結果 Benchmark for 'foreach' 33.01% Benchmark for 'for' 35.14% Benchmark for 'while--list-each' 31.75%
あんまかわんないね
配列 代入 組んでる奴が素人時 PHPユーザー(神レベル) foreach() while() for() PHPユーザー(パンピーレベル)while() while() while() でOKでつね。
結局カポコンのスクリプトは言う程速くなかったってことでFA?
ベンチとってる方々へ。 count() を使うなら、せめて配列をリファレンスで渡してください。 でないとものすごく遅くなるよ。
>>267 ループの外なら変わらんだろ
基本がなってないね
>>237-238 と同じソースにて
Win 2000・PHP 4.3.4・apache 2.0.48 環境で
Benchmark for 'foreach'
38.63%
Benchmark for 'for'
25.19%
Benchmark for 'while--list-each'
36.09%
win2000 php4.3.4 anhttpdでPHPを動かしてるんですが たまにエラーがでてサーバーが落ちてしまいます。 直す方法あるでしょうか。
テキストファイルから読み込んだデータをphpで一覧表示しているのですが、 チェックボックスにチェックが入ったもの全てを削除というのがなかなか出来ません。 log.txtの中身 118,ベッカム 119,シェフチェンコ 120,ロナウド del_info.phpの中 print "<form method=\"POST\" action=\"delete.php\" target=\"index\">"; print "<table border=\"0\">\n"; for ($i = 0; $i < count($id); $i++) { print "<tr><td>\n"; print "<input type=\"checkbox\" name=\"check[]\" value=\"$id[$i]\"></input>"; print "</td><td>$id[$i]\n"; print "</td><td>$name[$i]\n"; print "</td></tr>"; } print "<tr><td><input type=\"submit\" name=\"line_del\" value=\"削除\"></td>"; print "</table></form>\n"; delete.phpにどんなソースを書けばよいでしょうか?
log.txt全体を読み込んで一件ずつlog.txtへ書き出す その際にチェックが入っているレコードを書き出さないようにする
早速の返信ありがとうございますが、出来れば削除したいんです
ああ、なるほど。そのやり方で削除できますね。
>>270 Use the source, Luke!
anhttpdは知らん。バージョンも書いてないし。
276 :
269 :04/05/25 18:41 ID:???
色々コード変えてやってみたけど同条件下ではうちの環境だと
foreach≒whileでやっぱりforが一番速い
あとstr_repeatにしてもほぼ変わらないかむしろ速い
>>239 の環境が知りたい
>>270 apacheにしようぜ
>>275 hello worldとか簡単なやつでもエラー出ます。
エラーメッセージは↓これ。anhttpdのバージョンは1.42kです。
zend timeout window httpd.exe -アプリケーションエラー
"0x001554f4"の命令が"0x001554f4"のメモリを参照しました。
メモリが"read"になることはできませんでした。
>>276 やっぱapacheですかねぇ・・・
278 :
240 :04/05/25 18:49 ID:???
>276 >240 みてよ loop数を5000にして幾度か試すと for > foreach ≒whileになったよ。こっちでも。 最初のは、php5なんで無視してくれ。 でだ、カポコンの言うことは当てにならんということでFA
279 :
240 :04/05/25 18:50 ID:???
違った >269 みてよ でした。すまん。
280 :
240 :04/05/25 18:51 ID:???
だめだ、 > 263 見てよ だった。吊ってくる
class hoge{ function hoge(){ $this->aa = array("(´д`)"); } } $hoge = new hoge(); echo $hoge->aa[0]; <-と言う呼び方は邪道なんでしょうか? 呼び出しようのメソッドを作るか、$aa = $hoge->aa;とやってから呼ぶべきなのでしょうか?
282 :
269 :04/05/25 18:57 ID:???
気悪くしないでね そうするとPHP5はforeachが劇的に変わったのか それ以外で何らかが変わってそういう結果が出たわけだ そこが気になったので
ワロタ イキロ
284 :
277 :04/05/25 19:27 ID:???
apacheいれたらサクサク動きました 感謝
>>281 クラス内の変数にアクセスする場合は、呼び出し用のメソッドを作って参照するのが基本だよ。
PHP4は完全にカプセル化できないけど 後々の事考えたらそう覚えた方がいいね
クラス使う側からしたら取得したい要素気にしないといけないわけだからな 設計を見直してみるとか
MVCで作るのが基本だよ
ボケるんだったら振り幅を大きくしろ 中途半端なんだよ
レスが多いと思ってたらカポコンの自演とベンチ厨か C言語って書いてるあたり素人だろ>カポコン それと、定期的に現れるベンチ厨ウザイから、ベンチスレでも立ててくれ
292 :
267 :04/05/25 21:01 ID:???
>268 ループの外でも、計測範囲に入っているなら影響するべ。 もしあなたがでっかい配列を count() に渡しているなら、 今度リファレンスで渡してみ。すごく速くなるから。
>>292 標準語で話してくれませんか?
掲示板に方言使うとかキモ過ぎですよ
恥と思わないのか
295 :
nobodyさん :04/05/25 21:05 ID:RFog7Rov
php使っているサイトで、書き込んでも自分の書き込みがサイトにのこりません。 そこで、自分の書き込みが自分のPCに保存されるようにするにはどうしたらよいでしょうか? PHPかPerlを使ってプログラムを書かないといけないでしょうか? P3, 733MHz, 256MB, win 2k pro, IE6です。何方かよろしくお願いします。
297 :
267 :04/05/25 21:08 ID:???
>268 ループの外でも、計測範囲に入っているなら影響するでしょ。 もしあなたがでっかい配列を count() に渡しているなら、 今度リファレンスで渡してごらん。すごく速くなるから。
益々盛り上がってまいりました。
300 :
295 :04/05/25 21:20 ID:RFog7Rov
はっきりかけば、出会い系サイトで自分の書き込みは相手にいくけど、 自分の書き込みが鯖にのこらないんです。 それで、鯖に残らないなら、自分のPCに保存するということをしたいな、 という意味で書きました。これでお分かりになりました?
>>300 メモ帳に書く→Ctrl+Sキーを押す。
やったね、できたね。ヒャッホウ!
302 :
295 :04/05/25 21:29 ID:RFog7Rov
304 :
295 :04/05/25 21:31 ID:RFog7Rov
>>295 こんなところにいないで出会い系に行ったほうがいいんじゃないかなぁ?
はっきり言えばもう消えろ!
306 :
295 :04/05/25 21:34 ID:RFog7Rov
喪前が消えろよ
>>300 貴方がそのサイトのスクリプトを弄れるなら、
そういう機能(鯖にログ保存)を実装する、
または実装されたアプリを使う。サイトの作りに
手が出せないのなら、自前でProxyっぽいのを実装する
手もあるが、現実として貴方の取れる方法は、301の示した方法かな。
つまり「書き込む内容を事前にどこかに手動で残しておく」
書き込みの内容がどうも的を射てないように思えるので、自分で何とか
するんじゃなくて、既にできているものを探して利用するという方向で。
308 :
nobodyさん :04/05/25 21:38 ID:ulnj232e
自己IPを表示するphpを教えてください ホームページに入れたいんです
そろそろバカをかまうのやめようぜ。 居付いてしまったらウゼェし。
310 :
nobodyさん :04/05/25 21:43 ID:ulnj232e
いや、リアルで探している訳で どのphpも付加機能ばっかいらん
スルーしろよ
312 :
nobodyさん :04/05/25 21:47 ID:ulnj232e
ここはなんで人が悪いの。。 近所の人としゃべって事も無いのでは… それよりphp教えて
count()にリファレンスを渡す話を初めて聞いたのでちょっと調べてみたんだけど、 マニュアルにもUserContributedNotesにも載ってなくて、ほんとの所はどうなんだろう? 試せばすぐ分かるんだろうけどマンドくせ。 ソースだと関係する所はこれくらいかな。 ext/standart/array.c PHP_FUNCTION(count) -> php_count_recursive(zval *array, long mode TSRMLS_DC) 中ではポインタで渡してるだけの気がするんだが。
315 :
nobodyさん :04/05/25 21:54 ID:GONN/rJf
ぐぐってみたんですが、わからなかったので.... mb_encode_mimeheader ですが、日本語が10文字くらいになると末尾が文字化けしてしまいます。 「こんにちはこんにち(B」 みたいな感じです。 それよりも短い文字列だと文字化けしません。 phpのバージョンは4.3.6です。 よろしくおながいします
echo <<< EOM TEST←定数 EOM; EOM内で定数を使うことはできるのでしょうか?
>>315 mb_internal_encodingは?
319 :
nobodyさん :04/05/25 22:29 ID:GONN/rJf
>>318 315です。
デフォルトのままです。
コードはSJISで書いているんですが、mb_encode_mimeheaderするまえに
mb_convert_encodingでJISに変換しています。
なかなか面白かったよ。 つーかwin2000でphp語るなよw。
>>320 「C言語」なんていってる素人が何言ってるんだか
>>321 「D言語」なんて言ってる素人が何言ってるんだか
C語って言えってか?俺はそういうのは嫌なんだよ。
いくら2chでも貴様の数倍偉い人が決めた言葉よ?
好みでいいだろ。それとオツムの良さはまた別物。
あとベンチマークすんのはいいけど、
>>237-239 みたいにちゃんとした結果出せないと説得力ねーよ。
なんだよ%,%ってTimerクラス使ってるのにそりゃーねーだろ。
所詮2chのウンコ厨だな、そんなんだからいつまで経っても
3流の領域抜け出せねんだよ。あと試すんならunix系入れて試せ。
素 人 は お ま え 。
>>319 mb_encode_mimeheader使うのにmb_convert_encodingで変換なんかするからだろ。
カポコン神襲来
カポコンって誰?
327 :
nobodyさん :04/05/26 00:21 ID:VdU4NQov
皆さんにお聞きしたいのですが、PHPの書籍のなかで GDを詳しく扱った本はありませんでしょうか? 本の中の1つのコンテンツとして扱っていても結構ですので教えて下さい。 あと、GDを説明しているサイトもできればお願いします…。
>>326 誰もかまってくれないものだからジサクジエーンで自分を誉め称えるイタいやつ
結局、神叩きして終わりかよ。
>>327 PHPの書籍でGDの詳しいのねぇ。心当たりはないね。
GDは、今は独自パッチがあたったのがPHPに添付されてるけど
ImageMagickと同様、元々外部のグラフィックライブラリだから
PHP以外での使用方法にも探す範囲を広げた方が良いよ。
カポコンって頭叩いた時の音?
空っぽだからいい音出すのね。
>>323 プログラミング言語C 或いは C が妥当か。
あとbenchmarkだが他人様のはアテにせず自分でとろうな。
>>326 アホ共がこぞって使う共用のコテハンってところじゃないの?
>>327 無い。
337 :
nobodyさん :04/05/26 08:15 ID:5W/UUmVu
>>324 調べたらphp.iniのほうでデフォルトのエンコーディングがISO-8859-1になってました。
これをEUC-JPに変えて、mb_encode_mimeheaderするまえに文字コードをEUCに変換
させたら、うまくいきましたm(_ _)m
338 :
nobodyさん :04/05/26 09:18 ID:s4ZFO6Pq
evalのなかで関数やメソッドの定義をしたいんだけど、PHPでは無理ですか?
できるよ。テストスクリプト書く手間すら惜しいのか?
342 :
337 :04/05/26 12:24 ID:???
>>338 えっほんとに?
たとえばこういうことがしたいんですが。
class Foo
{
var $_row;
function Foo(&$row) {
$this->row =& $_row;
foreach (array_keys($row) as $key) {
eval("function $key() { return \$this->_row['$key']; }");
}
}
}
$data = array('a' => 1, 'b' => 2);
$foo = new Foo($data);
echo $foo->a();
結果
Fatal error: Call to undefined function: a()
evalにコンテキスト(バインディング)が指定できないから、こういう
のは無理じゃないんですか?
なんで最初から詳しく書かないんだろうね
正しい質問の仕方 情報は小出しにして分かりにくく、そして肝心なことは書かない。
>>344 どっかでそれの長文ver見かけたな。結構おもしろかった覚えがある。
function $key()
>>346 なぜこれが動くとか思ってしまったんだろうね彼は
$var = "a"; eval(" function ".$var."() { echo 'hello!'; } a(); "); a();
349 :
338 :04/05/26 13:33 ID:???
>>346 ,347
二重引用符が見えませんか。
>>348 グローバルなコンテキストの関数ならできるんですね。
知りませんでした。
350 :
338 :04/05/26 13:35 ID:???
クラス定義をまるごとevalの中に入れればできるような気がして きました。でもコードが読みにくいですね。ありがとうございました。
>>337 だからmb_encode_mimeheaderそのものが変換を行えるのだから
前もって変換なんていらんって
>>323 >C語って言えってか?
C語って何か新しいものか?
普通に考えてC。
まぁ、エンエヌと言うような素人なんだろうなぁ
カポコンって、googleで仕入れた情報(大半は間違ってる)を自慢気に語って さらに自演で自分を持ち上げる糞コテでFA?
現在のディレクトリを取得できないですか。 pwdみたいな。
自己レス getcwd() でできた・・・ゴメンナサイ。ほんとにわかんなかったんだよぉ・・・
356 :
nobodyさん :04/05/26 17:13 ID:fjwOYoWg
釣りするときってカポコンを名乗ればいいの?
そうだよ
カポコンが現れるとカポコンを賞賛するやつも現れる。 カポコンがいないときにはそんなやつはいないのに。 そのこころは?
自作自演といいたいのだろうが、 いないときにわざわざ話題を振って賞賛するスレじゃねえだろ。
>>237-239 count(&$arr2) にしたら for が一番速くなった。
ついでにこんなの
$arr4 = array_map(create_function('&$item', 'static $str4 = \'\'; $str4 .= \'>\'; return $str4.$item;'), $arr4);
もやってみたが、これがforに次いで速かった。
しかし、
$arr4 = array_map(create_function('&$item', 'global $leftarrow; static $str4 = \'\'; $str4 .= $leftarrow; return $str4.$item;'), $arr4);
にしたら一番遅くなった。うーん、微妙。
いいかげんベンチはやめてくれないか
俺はベンチネタも参考になるし別に構わんと思うが。 >362 やめろというだけじゃなく、かわりのネタを提供汁
>>363 バカか?お前
ここは雑談スレじゃなくて、質問スレ。
常時ネタが必要なスレではない。
スレ違いをわきまえてほしい
禿同。なんかラウンジと勘違いしてる香ばしいのが居るな
僕に何か質問はあるかな?
('A` )
mkdir($dir,0777) と作っているのに 755 でできてしまいます。 なんででしょうか・・・非常に困っています。 またオーナーも変えたいのですが変えられません。
>364 このfor/while/foreach云々って、 元は質問から始まった話じゃねえのか? それだったら、あながちスレ違いとは言えねえと思うがな なんで狭量なやつばっかなんだろね
>>370 umask(0);
をしてから実行したらできました!
心より御礼申し上げます。
連続誠に申し訳ありません。 chownについてなのですが、当方Apacheの実行ユーザとグループを apache/apache にしています。 これでapacheユーザが作成したファイルのオーナーをrootにしたいの ですが、これは不可能でしょうか。
あるディレクトリにphpソース群を配置し、様々なディレクトリにそれらphpのシンボリックリンクを はって、あたかもそのディレクトリにあるphpソースのように使いたいと思っています。 で、シンボリックリンクを作成するsymlink関数で無事作れたのですが、そのシンボリックリンクに ブラウザからアクセスしても実行できません。 パーミションは777になっているのにです。 それでsshでサーバに入り、ln -s /templ/hoge.php /aaa/hoge.php とリンクを張ると ブラウザからも実行できます。 なんででしょう・・・ ちなみに(環境により違うのでしょうが)sshで ls -la すると symlinkで作成したリンクは赤色 ln -s で作成したリンクは青色です。 お願いします。ヒントをください
イエーイ!!僕、カポコンどぇ〜〜〜〜〜す!!! mp(・∀・)qmチェキッラー!!。
>374 自治厨キモッ
378 :
nobodyさん :04/05/27 07:23 ID:XDC/x9QB
使用してるCPUやメモリで変動するってことでいいじゃん。 マターリ憩うぜ
まぁ PHP の雑談スレなんて存在しないワケだが。
>>373 `chown root.root file.file`;
とかじゃダメなの?
>>375 ls -la の結果を自分でよーく見てみるか、
as is で書いてくれると解決しそうなのだが。
383 :
nobodyさん :04/05/27 17:28 ID:fevNX4WH
PHP4.3.4+MySQL4.0.14でサイトを作っているのですが、 ソースコードをSJISで書いていて、DBもSJIS設定で、 SQLを実行するときに カタカナの「ソ」などの文字が勝手にエスケープされてしまいます。 (エスケープというか「ソ」の後に「ソ\」バックスラッシュが付く) これが原因で文末に「ソ」が来たりするとSQLが失敗します。 stripslashesは本来エスケープすべき文字も消してしまうので使えません。 Webで調べてみたところphp.iniのmagic_quotes_gqc=OFFに すると解決するらしいのですが、実際OFFにしてもまだ解決しません。 (phpinfoでOFFになっていることは確認済み) 他に勝手にエスケープされる要因は考えられるでしょうか よろしくお願いします。
だーからSJIS使うなってばよ……
どんなSQL回転だ
388 :
nobodyさん :04/05/27 18:42 ID:3qJOManL
今からPHPを勉強して覚えたいと思うのですが、何からはじめたらいいかサッパリわかりません。 何を用意して何を最初に学べばいいのでしょうか。 おすすめのサイトや参考書を教えていただけると助かります。
>>388 赤マンモス本でも読め
今ならPDFで公開されているから無料で読める
URLは自分で探せ すぐわかる
390 :
nobodyさん :04/05/27 18:48 ID:3qJOManL
>>389 早速検索かけてPDFファイルを見ております。
分かりやすくまとめられており、私でも勉強できそうです。
情報、ありがとうございます。
マジだーーー PHP徹底攻略だよな? マンモス本ってかなり詳しく書いている上級者向けのじゃん!!(違った?ラクダとはレベル違う?) それが無料って、すげーな
392 :
383 :04/05/27 20:07 ID:???
>>383 自己解決しました。
addslashesを使ってる代わりにmysql_escape_stringを使うと
上手くエスケープしてくれるようです。
やはり仰せの通りSJISで処理させるのは止めたほうがいいですね^ ^;
まあ仕方のないときのケースということで。
そもそもSJISで書かなきゃならん事情でもあるの? PHPを使うなら、出力段階でSJISに変換するのが一番楽だと思うけど
質問です。 自作関数内で獲得した pg_numrows(resource result)や pg_フェチ_array(resource result , int row) はグローバルスコープですか?
質問する前にやってみれば分かりそうなモンだが。 というか、やらなくても分かりそうなモンだが。
質問です。 wikiを利用しているのですが、ページにアクセスすると、 /?PHPSESSID314df6cb256897323032443 みたいのがつっついて思ったページにいけない時があります。 これをはずす設定をgoogle調べたのですが、 session.use_trans_sid を 0 にすればよいのでしょうか? global_register をoffにするのでしょうか? ページを読んでもよく理解できませんでした。 どうすればいいのでしょうか? サーバは、レンタルサーバです。
>>402 トライ&エラーの精神で頑張りましょう。
'x'=>'80' PHP触り始めたばかりなんですが、上のようなものをPHPスクリプトでよく見かけます。 「=>」って矢印の意で使ってるんでしょうか??
phpで、数字を3桁区切りにするにはどうすればよいのでしょうか?
409 :
407 :04/05/28 16:56 ID:???
>>408 すまそ。phpってそんな便利だったのか・・・
ありがとうございます。
>>407 現行スレを検索するくらい、最低限やってくれ
一応Google検索とスレ内検索はしたつもりなのですが、 数字の先頭に0を付けて桁揃えする関数はありますか? 1を0001とか。
Google検索とスレ内検索だけぢゃなく、 マニュアル検索もしてくれい
超ウルトライントロドンみたいな状態になってるな とオッサン丸出しな事を言ってみる
423 :
417 :04/05/28 22:46 ID:???
424 :
417 :04/05/28 22:48 ID:???
425 :
nobodyさん :04/05/29 09:13 ID:DJKvEK/M
すいません。質問です。 xmlヘッダ(<?xml version="1.0" encoding="UTF-8" ?>)の version、encoding を取り出したいんだけど、よい方法ありますか? どなたかご教授お願いします。
ここは数ある質問スレの中でも結構ひどい部類に入るな
PEARのテンプレートを使っているのですが テンプレート用HTMLの中に書いてある <? echo "test"; ?> のようなPHPは実行されないようなのですが 実効するようにはできないのでしょうか?
結構っつーか、相当酷いよ
>>428 試しにテンプレートを読み込んでそのままブラウザ出力するスクリプト書いてみ?
それと同じ事だよ。
> PEARのテンプレート > PEARのテンプレート > PEARのテンプレート > PEARのテンプレート > PEARのテンプレート ハァ?
別にハァするほどでもないと思うが。 意味は通じるし。
>>433 じゃあどのテンプレートを使っているか当ててみろよ。
>434 ウププ ほんとに言っちゃっていいの?!
テキストファイルの中を配列に読み込んで、文字列を追加するスクリプトを書いているんですが、 テキストファイル中の改行がそのまま文字列として、配列に格納されてしまう為、追加 したい文字列を同じ行に表示させることが出来ません。アドバイスお願いします。 恥ずいですがソースは以下で、環境はエディタがjvimでOSがFreeBSDでPHPは4.2です。 $log = file('log.txt'); for ($i = 0; $i < count($log); $i++) { $ex = explode(",", $log[$i]); if ($ex[0] == $_POST[hoge]) { ereg_replace ("/(\r\n)|\r|\n/","",$ex[$i]); $add = ("$log[$i]" . "$a" . "," . "$b" . ","); } } $fp = fopen('log.txt', 'w'); fputs($fp,$add); fclose($fp); }
>>436 何をしたいのかよくわからないけど
やりたい事がいくつかできてないんじゃない?
ereg_replace ("/(\r\n)|\r|\n/","",$ex[$i]);
$add = ("$log[$i]" . "$a" . "," . "$b" . ",");
}
}
$fp = fopen('log.txt', 'w');
fputs($fp,$add);
fclose($fp);
}
を
$log[$i] = trim($log[$i]).$a.",".$b.",\n";
}
}
}
$fp = fopen('log.txt', 'w');
fputs($fp,implode("\n", $log));
fclose($fp);
かな?最適なコードじゃないけども
ゴメン、
>>438 ですがレスアンカー間違い。正しくは
>>437 ですた。
しかも波括弧の数が違うから場所は変えなくてよかた。
激しくすまそ
443 :
nobodyさん :04/05/30 09:26 ID:wDkFum9g
.htaccessでのphp_flagの設定が許可されていないのですが、 register_globalsをoffにする方法はないでしょうか? 変数の扱いに気をつけているつもりですが不安なので、 できればoffにしたいのですが。
444 :
425 :04/05/30 10:08 ID:???
>>426 やはり自分で正規表現書くしかないですか・・・。
Parserで version、encoding を取れるのがあれば、
と思ったのですが。
もし、取れるParserがあったら教えてください。
xml_get_option()でとれそう! とか書いてみる。
>>444 versionとencodingだねかんだろ。
正規表現でやればかんたんじゃん。
そんなにたいそうなことか。
質問よろしいでしょうか。 phpadminを設置したのですが、 「The configuration file now needs a secret passphrase (blowfish_secret). 」 というエラーが出ます。 パスやサーバーの設定は何度も確認しましたが、間違いがあったのでしょうか。 どうぞ宜しくお願い致します。
スレ違いならすみません。質問なのでageます。
>>447 エラーメッセージをお読みになりましたか?
>>438 trimで出来ますた。ありがとう
あと確かにやりたいことがいくつも出来てませんですた。
>>443 register_globals:PHP_INI_PERDIR/PHP_INI_SYSTEM
方法はない。
自分で小手先でどうにかしようとする前に
管理者になんとかしてもらう/させるべき事項。
452 :
444 :04/05/30 21:47 ID:???
>>445 ,446
分かりました。正規表現でやってみます。
助言ありがとうございました。
前回の結果を書き込んだテキストファイルを読み込む場合どうしたら前回の結果を 表示出来る様になりますか? <?php $pointer = fopen("rireki.txt","r"); $fileline = fgets($pointer); fclose($pointer); if文 $rireki="格納する文字" $pointer = fopen("rireki.txt","w"); flock($pointer,LOCK_EX); fputs($pointer,$rireki); flock($pointer,LOCK_UN); fclose($pointer); ?> 上のイメージで作りましたがどうもエラーが起きてしまいます。 どこにprint($rireki)をつくればいいのでしょうか? 様々な個所に入れて試してみましたがエラーになりました。しかしif文の後に入れると 今回の結果が表示されてしまいますので困っています。 どなたか教えてください。
どうしてエラー文を一緒に書かないのですか
>>453 どんなエラーが出たのか晒せ。
あと、if文云々っつーならif文も。
>>453 何をしたいのかいまいち判らんが。
普通に前回の内容(1行)が入っている
$filelineを表示すれば良いのでは?
print($fileline);
$rireki="格納する文字"; //終端の;が抜けてたけど?
457 :
453 :04/05/30 23:24 ID:???
すいません自己解決できました。よく文を見直してみたらfilelineで表示できる 事に気づきましたwすいませんでした。 あとついでといってはなんですが今アクセスカウンタを作っているのですがセション をつかってアクセスカウンタの数値を前にアクセスした人がリロードしても増えない ようにするにはどうしたらいいのですか? 質問君みたいですいません。
>>457 質問君つうよりそれ以前の問題。
リロードで増やさないというのは、何をリロードとみなすかによる。
カウンターなんて、腐るほど転がっているから、そのソースを
参考にした方がいいんでね。
459 :
443 :04/05/31 00:10 ID:???
>451 やはり無理なのですね。 管理者に相談してみることにします。 ありがとうございました。
460 :
nobodyさん :04/05/31 14:07 ID:2SJTqa7f
その通りの症状ならそこに書いてある通りに対処しろよ
字が読めないならテキスト読み上げソフト入れればいいじゃん
日本語が分からないなら翻訳ソフト使え
>>461 リンクさきにはインストール時の設定とかを
見直せって書いてあるんだけど、変なところが
見つけられないですよ
>>464 で、どうしろと?
インストール時の設定(若しくは手順)や環境くらいは説明したら?
このスレのエロイ人はエスパーじゃないんだから。
>>464 みんなが言ってることを理解してるのか?
なんべんでも見直せ。
おまいの設定がまずいにきまっとる。
せっていすらできんやつが鯖たてるな
!
Apache再起動しろ。
/********** 質問者たちへ ここで聞いてまともな返事が返ってくると思うな **********/
<br />って なんで<br>じゃないのさ?
nl2brの話かい? HTMLで<br />と書いて困ることはないが、XHTMLで<br>だと困るからだろ。
自サイトからのOUTは簡単にわかるのですがINはどうやってわかるのですか? index.php?id=aaa みたいにやらない方法ってありますか?
おーい、誰か翻訳してくれ
473 :
471 :04/05/31 17:49 ID:???
解決しますたw
既出だったかもしれないけど、 $str = "ABCDE"; を $arr = array('A','B','C','D','E'); に分解する最適な方法を教えてください。
$str = "ABCDE"; $arr = array($str{0},$str{1},$str{2},$str{3},$str{4}); はい、次!
476 :
474 :04/05/31 18:39 ID:???
dクス。けど、その{}ってどういう仕組みなの?
477 :
464 :04/05/31 19:21 ID:???
>>465 漏れが建てた鯖じゃないのよ
色々いじられててよく分からんし
再インスコはできないし。
でもまあ、テキスト読み上げソフトで何とかなったよw
dクス
478 :
nobodyさん :04/05/31 19:40 ID:a1bq18t+
>>474 $arr = explode("",$str);
これでできたら、楽だと思ったことある
preg_splitの何が不満?
>>478 $arr = preg_split('//', $str);
とか。
問題は、前と後ろに余分な配列が入ることだけど。
array_pop() と array_shift() で外すようにすれば使えるかも。
まあ、今回の場合はこれで十分だと思うけど。
$arr = array();
$len = strlen($str);
for ($i=0; $i<$len; $i++) {
$arr[] = $str[$i];
}
<br>〜</br>でこっからここまで改行って意味わからんから。
$str='ABCDEFGHl'; preg_match_all('/./',$str,$match); print_r($match[0]); ダメか・・・・
>>480 まぬある読めば、PREG_SPLIT_NO_EMPTYと、例まで出して説明してありますが
それでもそんなややこしいことしますか?
$str = 'string'; $chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY); print_r($chars);
486 :
nobodyさん :04/05/31 21:36 ID:LIfE6g2z
$str = "111 222 333" などスペースで区切られた数字をそれぞれ配列として変数にぶち込みたいのですが どうすればいいでしょうか
>>486 ちょっと上のスレくらい読んでよ
explode()
そんなやつにはきついパンチをぶち込んでやれ
490 :
nobodyさん :04/05/31 21:46 ID:Mjcj/gqf
phpで書かれた、 カスタマイズ容易な ウェブメールプログラムがあれば教えて下さい。 「php ウェブメール」で検索しても 結果が山ほど出てきて絞り込めません。 よろしくお願いします。
492 :
490 :04/05/31 21:56 ID:???
>>491 ありがとうございます
そちらで聞いてみます
$start = date("Y/m/d H:i"); $end = date("Y/m/d H:i"); $startから$endまでの経過時間を知りたいです。アドバイスよろしくお願いします。
それは計算式を教えてくれと言うことか? なら板違いだぞ。
>>493 よほど遅いマシンでなければ間違いなく0秒。
>>470 ありがたう
タグで検索しても引っかからないから助かりました。
自作サーバでdebian+PHP4.3.6+Apache2の環境で動かしています。 sessionを使ってみようと思ったのですが、 <?session_start(); if (!session_is_registered('count')) { session_register("count"); $count = 0; } else { $count++; } ?> <html><body> <a href='<?php echo $PHP_SELF ."?PHPSESSID=" . $PHPSESSID ?>'> <?php echo $count ?> </a> </body></html> これだけなのですが、動きません。 エラーは一切でず、$PHPSESSIDは空っぽです。 何が原因だと考えられるでしょうか? phpinfoでは Session Support enabled となっており、 コンパイルオプションは以下のみです。 './configure' '--enable-mbstring' '--enable-mbregex' '--with-apxs2=/usr/apache2/bin/apxs' '--with-mysql' よろしくお願いします。
<?seesion_start(); これはいいの?
$ar = stat('test.php'); echo $a['ctime']; //またはmtime? Windows上でためしたところ、上記でtest.phpファイルそのものの最終更新時刻がわかりますが、 Unix上では上記スクリプト実行のたびに更新時刻もどんどん変わってしまいます。 これはOSのし様ですか?
503 :
500 :04/06/01 00:57 ID:???
>>501 さん
<?php
session_start();
とちゃんと書いてます。ごめんなさい。
基本的に文法ミスは無いはずです。
違うサーバではきちんと表示されることがわかりました。
なんででしょう?
# ここに張るのに適当に短くしたつもりが・・・
・PHP全般の質問スレです。 ・新規質問の方は上げてください。age進行でお願いします。 ・質問する際には環境も明記。 ・正しい日本語で分かりやすく。 ・レスがつかないからって逆切れする厨お断り。 ・解決しなくてもこたえてもらったら礼を。
>>502 時刻だけならfilemtimeでよくない?
鯖で見てないからどうなるかしらんけど。
>>493 文字日付→UNIXタイムに変換する関数がある。
>>505 いや、どちらにしてもctime/mtimeの取得方法が
内部で変わるわけではないので、
>Unix上では上記スクリプト実行のたびに更新時刻もどんどん変わってしまいます。
>これはOSの仕様ですか
が、そもそも変な感じ。
508 :
502 :04/06/01 04:45 ID:MqX7wJyb
ありがとう。 実行のたびに更新時刻が変わったのは何かの勘違いでした。
509 :
sakky :
04/06/01 13:57 ID:aOyX5NXt テンプレート形式にしたくて
$a = "abc<-#email#->cba";
$email = "
[email protected] ";
$b = ereg_replace("(<\-#)([a-z]+)(#\->)","$\\2",$a);
print($b);
という形式でテストしてみたのですが、置換したところが、$emailと出て、
変数として扱ってくれません。どうしたら変数として扱ってくれる置換が
できるでしょうか?教えてください。お願いします。