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

【PHP】下らねぇ質問はここに書き込みやがれ 29

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/09/17(日) 04:26:39ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
  (逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
  (荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0002nobodyさん2006/09/17(日) 04:26:57ID:???
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
【PHP】くだらねぇ質問はここに書き込みやがれpart8
http://pc8.2ch.net/test/read.cgi/php/1123431535/
【PHP】くだらねぇ質問はここに書き込みやがれpart9
http://pc8.2ch.net/test/read.cgi/php/1125716012/
【PHP】下らねぇ質問はここに書き込みやがれpart10
http://pc8.2ch.net/test/read.cgi/php/1127581425/
【PHP】下らねぇ質問はここに書き込みやがれpart11
http://pc8.2ch.net/test/read.cgi/php/1129582431/
【PHP】下らねぇ質問はここに書き込みやがれpart12
http://pc8.2ch.net/test/read.cgi/php/1130835396/
【PHP】下らねぇ質問はここに書き込みやがれpart13
http://pc8.2ch.net/test/read.cgi/php/1132921016/
【PHP】下らねぇ質問はここに書き込みやがれpart14
http://pc8.2ch.net/test/read.cgi/php/1134868212/
【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/
0003nobodyさん2006/09/17(日) 04:27:25ID:???
【PHP】下らねぇ質問はここに書き込みやがれpart16
http://pc8.2ch.net/test/read.cgi/php/1139146534/
【PHP】下らねぇ質問はここに書き込みやがれpart18
http://pc8.2ch.net/test/read.cgi/php/1142417901/
【PHP】下らねぇ質問はここに書き込みやがれ Part19
http://pc8.2ch.net/test/read.cgi/php/1144513878/
【PHP】下らねぇ質問はここに書き込みやがれpart20
http://pc8.2ch.net/test/read.cgi/php/1146165153/
【PHP】下らねぇ質問はここに書き込みやがれpart21
http://pc8.2ch.net/test/read.cgi/php/1148389517/
【PHP】下らねぇ質問はここに書き込みやがれ 22
http://pc8.2ch.net/test/read.cgi/php/1149710968/
【PHP】下らねぇ質問はここに書き込みやがれ 23
http://pc8.2ch.net/test/read.cgi/php/1150995543/
【PHP】下らねぇ質問はここに書き込みやがれ 24
http://pc8.2ch.net/test/read.cgi/php/1152251693/
【PHP】下らねぇ質問はここに書き込みやがれ 25
http://pc8.2ch.net/test/read.cgi/php/1153652403/
【PHP】下らねぇ質問はここに書き込みやがれ 26
http://pc8.2ch.net/test/read.cgi/php/1154923910/
【PHP】下らねぇ質問はここに書き込みやがれ 27
http://pc8.2ch.net/test/read.cgi/php/1156262092/
【PHP】下らねぇ質問はここに書き込みやがれ 28
http://pc8.2ch.net/test/read.cgi/php/1157284868/
0004nobodyさん2006/09/17(日) 04:27:41ID:???
関連リンク
■本家マニュアル   http://www.php.net/manual/ja/
■日本PHPユーザ会 http://www.php.gr.jp/
■PEARマニュアル  http://pear.php.net/manual/ja/
■メーリングリスト   http://ns1.php.gr.jp/mailman/listinfo/

 (以下英語)
■Smarty       http://smarty.php.net/
■Zend本家      http://www.zend.com/
■Zend Framework  http://framework.zend.com/
■php | architect   http://www.phparch.com/
■Smartyマニュアル http://smarty.php.net/manual/en/
■ZFマニュアル    http://framework.zend.com/manual/en/
■PECL本家(英語) http://pecl.php.net/

まだ英語しかないマニュアルも後々/manual/en/を/manual/ja/に変えてみたら日本語があるかもしれません。
0005nobodyさん2006/09/17(日) 04:28:13ID:???
関連スレ
PHP関連の書籍 第3版
http://pc8.2ch.net/test/read.cgi/php/1150558685/
PHP関連サイト
http://pc8.2ch.net/test/read.cgi/php/982694601/
【PHP】PEAR Part2
http://pc8.2ch.net/test/read.cgi/php/1122899232/
【Smarty】PHPのテンプレートエンジン【Flexy】
http://pc8.2ch.net/test/read.cgi/php/1118799352/
[PHP]フレームワークについて語るスレ4[総合]
http://pc8.2ch.net/test/read.cgi/php/1151706907/
Webでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1133489897/
【PHP】セッションについて語ろう!【PHP】
http://pc8.2ch.net/test/read.cgi/php/1064399467/
【ZendStudio】PHP統合開発環境 Part2【Eclipse】
http://pc8.2ch.net/test/read.cgi/php/1154082822/
最強のPHPエディタはなに?
http://pc8.2ch.net/test/read.cgi/php/1133785416/

[PHP-users MLヲチ9]丸投げした覚えは全くありません
http://pc8.2ch.net/test/read.cgi/php/1143731062/
中学生がPHPを習得するスレ
http://pc8.2ch.net/test/read.cgi/php/1139746974/
【PHP】Lvうpしたいので宿題ください
http://pc8.2ch.net/test/read.cgi/php/1147830986/
0006nobodyさん2006/09/17(日) 04:33:11ID:???
         \  /:.:/:.:.:/:.:.:.:.:.:.:.:.:.:.:.:.l:.:\ ヽ \
          ヽ/:.:.:/:.:.:/:.:.:.:.:.:.:.:.:.:.:/:./:/:.:.:.:.!ヽ ヽlヽ
            /:.:.:.:|:.:./:.:.:.:.:.:.:.:.:.:.:///:.:l:.:.:.:|:.:ヽ / l
.           |:.:.:.:..|ィ‐_-_、_. -///;ハ:.:|:.:.:.:!:.:.:.V   l
.           |l:.:.:.:.N r‐ァ-、` ̄  メ/‐-ヽ|、:.:|:.:.:.:|   _」
            ハ:.:.:.:l  弋:ソ  /´ ィ=‐、、\/:.:.:./-r ´
          /:.li \_\      ,   弋:ソ '´/:.:.:./:.:.:.l
.      __ /:.:.li   il、   , -- ‐、   _/:.:./:.:.:.:.:.!
     /´‐-、ト,:./:li ※ il:.:\ {__   }  ア ̄/l:.:.:.:.:.:l:.l     下らねぇ質問はここに書き込みやがれ、ちび。
.   /  ‐-〈//li  il:.:.:.:.:.> 二ニ´ィ:li ※〃:.l:.:.:.:.:.:.l:l
   l  `ニ7'´: :.li   il ̄ ̄ _\ノヽ._l:li   il-lユ‐_-、:.:!l
  r‐l   |フ!: : にli  il〃 ̄  ィトK\  li  ilこ|ー‐  |:.:.:.l
  |〉l  イ _): :.にli※/ \///)l:l l:l ヽli. ilこ!|二  /:.:.:.:.:!
/>にLイ<:.:にli /´     //(!|:| L!==li※!こl./  /!:.:.:.:.:.:.l
丁L__|ーLノ:.:.:.にX      // )!|:|   ハ ilこ! l  /ヽl:.:.:.:.:.:.:l
0007nobodyさん2006/09/17(日) 05:03:55ID:WkDxxiWw
n進数表現への変換にトライしてますが
16進数で8桁以上になると、
PHP_MAX_INTを超えてしまい、
正確な余が算出できなくなります。
大きな16進数をn進数にするには
どうすればいいのでしょうか?
0008nobodyさん2006/09/17(日) 05:37:11ID:???
>>7
使ったことないけどpearのMath_Basex?
http://pear.php.net/package/Math_Basex

とにかくintの範囲を超える数値演算は、string(もしくは配列?)を使うしかないよ。
0009nobodyさん2006/09/17(日) 05:43:36ID:???
【PHP】下らねぇ質問はここに書き込みやがれpart17
http://pc8.2ch.net/test/read.cgi/php/1140786348
0010nobodyさん2006/09/17(日) 05:47:26ID:???
>>8
ありがとうございます
ちょうどpearを探してました
0011nobodyさん2006/09/17(日) 05:51:15ID:???
>>7
念のため言っておくとその基数が2の冪なら何の苦労もいらないよ
0012えがみボンバイエイ2006/09/17(日) 07:12:52ID:???
<?php
require_once("XML/RSS.php");
$rss=new XML_RSS("http://manabekawori.cocolog-nifty.com/blog/index.rdf";);
$rss->parse();
?>
<h2><?php print(mb_convert_encoding( $rss->channels['title'],"EUC-JP","auto")); ?>
</h2>
<?php foreach($rss->items as $item){ ?>
<?php print(date(($item['dc:date']))) ?> <a href="<?php print($item['link']); ?>" target="_blank">
<?php print(mb_convert_encoding($item['title'],"EUC-JP","auto")); ?>
</a><br>
<?php }
?>


と書くと
2006-09-17JST00:41:11+09:00  夫婦別姓制度はまだなのか
2006-09-13JST22:46:23+09:00  おやすみ投稿か
2006-09-08JST00:08:49+09:00  カッチカチやぞ
2006-08-31JST22:40:11+09:00  エロかわ…?

言う風に表示されるのですが、
JST00:41:11+09:00の部分を削りたいのですが、
どうすれば宜しいか分かる方いらっしゃいましたら宜しければ教えていただけると幸いです。
0013nobodyさん2006/09/17(日) 07:19:36ID:???
>>12
$item['dc:date']
こいつの中身を正規表現でJST〜部分を消してあげれば良いんじゃない?
0014nobodyさん2006/09/17(日) 07:26:38ID:???
ヒント : 先頭10文字
0015122006/09/17(日) 07:40:49ID:???
>13
ほんと、自分はまだまだでして、、、
まったくなんですよね。。。
ちょっとわからないでん。。。

>14
すみません、
もう少し詳しくもらえると嬉しいです。。。
0016nobodyさん2006/09/17(日) 07:45:34ID:???
>>15
<?php print(date(($item['dc:date']))) ?>を
<?php print(substr($item['dc:date'], 0, 10)) ?>に
0017nobodyさん2006/09/17(日) 07:46:25ID:???
>>15
>>16で解決できるけど、ちゃんとsubstrが何なのかって言うのを調べるように!
0018122006/09/17(日) 07:52:09ID:???
>16
おお!
すごす!
できました!
有難う御座います!

>>17
なるほど、substrが大事なのですが、
ネットで調べまくります!
0019nobodyさん2006/09/17(日) 07:57:55ID:???
>>18
http://www.php.net/manual/ja/
0020nobodyさん2006/09/17(日) 08:04:18ID:???
>>18
違う!そうじゃないぞぉ!
ちゃんと毎回これがどういうことをしてどういう結果になっているのか
って言うのを理解していかないと良いプログラマンにはなれんのだよ!
0021122006/09/17(日) 08:05:58ID:???
>20
なるほど、今色々調べてたのですが
最初のヒント10文字ってのはそういうことだったんですね、、、。

0022nobodyさん2006/09/17(日) 10:55:24ID:lKV/vaA2
require_once("XML/RSS.php");

これって XML.phpとRSS.phpのふたつのファイルを読み込むって意味ですか?

なら、$Data=file("data/database.csv");
でdata.csvとdatabase.csv2つのCSVファイルを読み込むことはできますか?
0023nobodyさん2006/09/17(日) 11:02:12ID:???
>>22
^^;
0024えがみボンバイエイ2006/09/17(日) 11:10:04ID:???
SEOツールを作りたいのですが、ようはサイトURLを指定するとサイトのメタタグが出てきてそれの
一覧を出して自分のサイトのメタタグの参考できるようなサイトにしたいなと。
<html><head><title>メタタグ参考ツール</title></head><body><h1 style="background:#CCCCCC">メタタグ参考ツール</h1>
<?php
//URL
$url = array("http://ega.chu.jp/all";,"http://www.bb-chat.tv/";,"http://www.snsnavi.jp/";,"http://yahoo.co.jp";,"http://mixi.jp";,"http://livedoor.jp";,"http://iki.2ch2.net/";);
//$url配列を一個づつ処理
foreach ($url as $value){
//メタタグの内容を取得
$array = get_meta_tags($value);
$array = mb_convert_encoding($array, "EUC-JP", "auto");
//メタタグの内容を表示
echo "<p>サイト名(サイトへリンク):"."<a href=".$value.">サイト名</a>";
echo "<p>サイトのサムネイル:";
echo "<p>サイトの内容:".$array["description"];
echo "<p>サイトのキーワード:".$array["keywords"];
echo "<p>はてなブックマーク数:";
echo "<hr />";
}?></html></body>
今できない事が
1、サイト名を表示させたい
2、文字化けしてる所を文字エンコードで直したい。
3、サイトのサムネイルを自動で表示させたい
4、サイトのURLを外部で書き込みできるようにし、
「url.dat」みたいな外部ファイルから読み取りたい。

と言うことをしたいなと、全部は流石にあれなので一つでもいいので教えていただけると嬉しいです。宜しくお願いします。

0025nobodyさん2006/09/17(日) 11:24:04ID:lKV/vaA2
>>23

すいません、2つ以上のファイルを読み込むにはどうしたらいいでしょうか?

$Data=file("data/database.csv"); ???

0026nobodyさん2006/09/17(日) 12:06:06ID:???
>>24
書き込むスレが違う
0027nobodyさん2006/09/17(日) 12:06:36ID:???
>>25
$Data[] = file("data/data.csv");
$Data[] = file("data/database.csv");
0028nobodyさん2006/09/17(日) 12:13:34ID:lKV/vaA2
>>27

$Data= を $Data[] にすればいいんですね。

ありがとうございました。
0029nobodyさん2006/09/17(日) 12:18:20ID:???
>>28
もうプログラミングなんかしないほうがいいぞ?
0030nobodyさん2006/09/17(日) 12:46:13ID:???
PHPなんてプログラミングに入らんだろw
0031nobodyさん2006/09/17(日) 12:56:58ID:???
入るだろ。プログラミング自体、誰でもできる単純作業だからなw
0032nobodyさん2006/09/17(日) 13:00:09ID:Zr3tx6hp
直接このスレとは直接関係ないのですが疑問があるので教えて欲しいです

私A - 同窓会関連のテキストや画像などを自宅サーバにて管理(Linux+Apache+PHP+MySQL)しています
友人B - 同窓会員で自宅PCから接続してきます

Bが複雑な検索をしてきて(私の技術のなさからなのですが、検索に2分ほどかかるとします)
待ちきれずに1分ほどでブラウザの停止や、ブラウザを閉じてしまうなどをしてしまうと
プログラムがecho,printなどで出力しようとしているデータはどこで消えてしまうのでしょうか?

BのPCまで行ってブラウザが閉じているのでそこでなにもせずに消える
Bが要求をやめてしまっているのでAのサーバ内で消える
など漠然と考えてはいるのですが検索などしてみても答えが分かりません

”検索速くしてよ、途中で止めることあるよ”
とか言われて、いろいろと試行錯誤はしているのですが、
ふと、途中で止められたデータはどこに行ってるんだろう?と疑問に思ったのです

こういうのはネットワーク系(?)のスレッドのほうがいいかとも思ったのですが
ご存知の方おられましたらよろしくお願いいたします
0033nobodyさん2006/09/17(日) 13:10:26ID:???
>>32
ブラウザ閉じたことはサーバーは知らないから
処理を最後までやって出力→そのデータは誰も受け取らない
ってなるだけ
0034nobodyさん2006/09/17(日) 13:17:18ID:???
>>32
ttp://www.php.net/manual/ja/features.connection-handling.php
0035nobodyさん2006/09/17(日) 13:18:35ID:???
>>12
死ねマルチ
0036nobodyさん2006/09/17(日) 17:20:52ID:???
POSTされたテキストデータの両端にある余分な半角スペースや全角スペースを削除したいのですが、
trim関数では日本語が扱えないため、全角スペースを消せません。

この場合、どうするのが一番良いでしょうか? 正規表現などでしょうか?
0037nobodyさん2006/09/17(日) 17:33:09ID:???
if(mb_strpos($str, ' ') == strlen($str) - 1)
  $str = mb_ereg_replace(' $', '', $str);

とか。実行してないけど
0038nobodyさん2006/09/17(日) 17:36:11ID:???
$str = mb_ereg_replace('/[\s| ]*$/', '', $str);

でよくね?
0039nobodyさん2006/09/17(日) 17:51:35ID:???
ゲラゲラゲラ
0040nobodyさん2006/09/17(日) 19:05:08ID:Eys1a2Y2
レンタルブログスクリプトを丸ごと入れたいんだけど、
どっかにオススメ無い?有料(事業者登録)OK。

今も自分のWEBサーバに事業者登録してるのを入れてるんだけど、
妙に使いにくくて、人に貸しにくい。
ちなみにプログラムなんて書けません。
0041nobodyさん2006/09/17(日) 19:06:31ID:???
ここは作る人の質問スレなんで他所で聞いた方がいいんじゃないかな
0042402006/09/17(日) 19:07:13ID:Eys1a2Y2
そうみたいですね。
思いっきり失礼しました。
0043nobodyさん2006/09/17(日) 19:27:13ID:???
WinXPにPHPインストールするのには何か特別なことが必要なの?
win2000では普通に動かせていたのに
色々なphpインストールtips見てその通りやったのに何回やっても404表示だお(´Д`)

考えられる原因を並べてくださいエスパーたん(*´Д`)
0044nobodyさん2006/09/17(日) 19:31:29ID:???
>>37、>>38
ereg系って問題あるんじゃなかったっけ??
0045nobodyさん2006/09/17(日) 19:32:08ID:???
考えられる原因:見落としていることがある。
0046nobodyさん2006/09/17(日) 20:50:13ID:???
>>36
$rm = "( | )";
preg_replace("/^$rm+|$rm+$/","", $text);

デフォルトのtrimに全角SPを追加したいだけなら $rm = "( | |\\t|\\n|\\r|\\0|\\x0B)";
textareaとかで各行対象なら "/(?<=\r|\n|^)$rm+|$rm+(?=\r|\n|$)/"
0047nobodyさん2006/09/17(日) 20:51:43ID:5LNOCvxa
>>46
その正規表現じゃダメだろ。
前後両方に空白が入っていた場合。
0048nobodyさん2006/09/17(日) 21:09:27ID:???
>>44
eregは推奨しないがmb_eregは問題ない。

具体的にはeregがバイナリセーフでなく、且つpreg系関数より大抵10倍前後遅い。
mb_eregはバイナリセーフだし、代用できる関数も無い。
0049nobodyさん2006/09/17(日) 21:38:03ID:???
>>47
ん?? そうか??
0050nobodyさん2006/09/17(日) 22:00:51ID:???
>>48
UTF-8でスクリプト書いてりゃpreg_関数で
/[あ-ん]+/みたいなことは出来るけど?

それとバイナリセーフのソースは?
0051nobodyさん2006/09/17(日) 22:11:12ID:???
>>50
用にはなってないだろう、それは。

mb_eregとmb_ereg_replaceは最新版ではバイナリセーフの模様。
mb_ereg_matchはバイナリセーフじゃなかった。
0052nobodyさん2006/09/18(月) 12:24:53ID:???
何かお勧めのSMTPServerソフトありませんか?
自分はMELON使っているのですが、携帯にメールができなくて・・・
0053nobodyさん2006/09/18(月) 12:38:38ID:???
それはWindows用の話か?
0054nobodyさん2006/09/18(月) 12:41:18ID:???
>>53
そうです
最近携帯宛のメルマガだったんですが、最近メールが送信できなくなってしまって・・・
0055nobodyさん2006/09/18(月) 12:50:12ID:???
前は送れてたのに今は送れない、とかだと
スパム業者扱いされてIPでブロックされてるのかもな。
だったらソフトをいくら変えても無駄だと思う。
0056nobodyさん2006/09/18(月) 12:52:59ID:9uSI0qsK
>>54
https://ybb.softbank.jp/support/op25b/
http://www.itt-web.net/modules/xeblog/?action_xeblog_details=1&blog_id=445
0057nobodyさん2006/09/18(月) 13:54:16ID:crSwhLpg
ftp_login( $link, 'example_user', 'example_password' )

FTP関数でログインする際に、パスワードをパラメータに指定するのですが
これって(ファイルを誰かに見られる事はないとは思うけど)例えると「紙にパスワードをメモしておく」のと等しいよね?

大丈夫なのかな?
0058nobodyさん2006/09/18(月) 14:16:10ID:???
そもそもプログラムソースを悪意ある第三者に見られてる時点で
セキュリティとしては大穴だと思うけどな。
0059nobodyさん2006/09/18(月) 14:16:33ID:???
>>57
サーバのユーザが特定の人しかいないなら問題無いんじゃね
パスワード書いてるファイルにパーミッションなり、MD5にするなり、サーバのセキュリティなりによって違うでしょ。
0060nobodyさん2006/09/18(月) 14:43:16ID:???
パラメータ値だけを入れたincludeファイルを別に分けて
DOCUMENT_ROOTより上位のディレクトリに置いておく
くらいは常道かなと思う。
あとパーミッションも他のユーザ・グループでは
閲覧できないようにしてもいいよね。
0061nobodyさん2006/09/18(月) 17:24:05ID:???
>>57
そもそもFTPは平文でパスワードが流れるんだから、心配してもしょうがない。
気になるのなら、SFTPやSCPを使うこと。
0062nobodyさん2006/09/18(月) 20:23:41ID:???
>>61
いいたいことはわかるけど、より正確には、
ネットワーク上に平文で流れることと、
ソースコード中にパスワードが平書されていることは、
次元が違う話でしょ。
ソースコード中にユーザID/パスワードを書きたくない。
もしくは最小限にしたい。という発想は大いに結構だと思いますが。
ようは、そこをがんばってもFTPである以上平文パスワードという
限界があるんだよ。ということを知ってればよいと思います。
0063nobodyさん2006/09/18(月) 21:24:29ID:S7kQJtix
PHP 5.1.6 (cli) なんですが
register_shutdown_functionがうまく利きません。
具体的には
<?php
function hoge($param) {
sleep(3);
echo $param;
}

register_shutdown_function(hoge, 'TEST!!');
?>
を実行しても3秒後に'TEST!!'が表示されてしまいます。
特にregister_shutdown_functionの記述に不備はないと思うのですが、
この現象について解説していただけばと思います。
0064nobodyさん2006/09/18(月) 21:26:48ID:???
>>63
何も問題ないと思うのは俺だけ?
0065nobodyさん2006/09/18(月) 21:28:55ID:???
まったく問題ない。
0066nobodyさん2006/09/18(月) 21:29:36ID:???
あと、CLIだから動いてるんだと思うけど
ブラウザで動かしたらそれエラーになるだろ?
0067nobodyさん2006/09/18(月) 21:30:20ID:???
>>63
プログラムを実行したら、メイン処理終了後に3秒経ってechoが実行されたんだろ?
記述通りに動いてるようにしか見えないが何が問題なんだ?
そもそもそれはどのように動くべきだと考えてるんだ。

マニュアル記載ではsutdown_functionではechoは使えないことになってるが
それはブラウザとの通信が途切れるSAPI版の話であってCLIでは関係ないしな。
0068nobodyさん2006/09/18(月) 21:44:59ID:S7kQJtix
>>63
テスト用としてCLIの例を挙げましたが実際はSAPIでの結果です。
私の勘違いかもしれないですけどregister_shutdown_functionは
レスポンス後に実行される関数と思っているのですが、
それは間違いでしょうか?

ちなみにSAPIの場合でもechoは</HTML>の後に表示されましたが
マニュアルの注意書き(printまたはechoのような文を使用してデバッグを行うことはできません。 )は
「できるけどやってはいけない」ということでしょうか?
0069nobodyさん2006/09/18(月) 21:45:49ID:S7kQJtix
上のアンカーは>>63ですという意味です。
0070nobodyさん2006/09/18(月) 21:48:27ID:???
>>68
レスポンス後、の意味が不明瞭だけど
echoの結果が表示されたのは奇妙だな。
0071nobodyさん2006/09/18(月) 21:52:48ID:???
echoが使えないのは昔のバージョンの話。今は仕様が変更されてる。
ttp://php.plus-server.net/function.register-shutdown-function.html
> PHP 4.0.6 以前のバージョンを Apache で動かしている場合、 登録されたシャットダウン関数は
> リクエストの完了後(結果の 出力を含む)に実行されます。そのため、echo() や print() を用いて
> ブラウザに出力したり ob_get_contents() を用いて出力バッファの内容を 取得したりすることが
> できませんでした。
> PHP 4.1 以降、シャットダウン関数はリクエストの一部として実行される ようになり、そこから結果を
> 出力できるようになりました。
0072nobodyさん2006/09/18(月) 21:54:36ID:???
本当だ!今実行したらCLIでもApacheで動かしても出た!
でも、apacheで動かした場合は何故か「START!」もTEST!!と同時に3秒後に表示されちゃった

<?php
echo "START !";
register_shutdown_function(hoge, 'TEST!!');

function hoge($param) {
sleep(3);
echo $param;
}

?>
0073nobodyさん2006/09/18(月) 21:55:57ID:???
>>72
START!の出力が3秒後に出たのは出力のバッファリングのため。
フラッシュをかけない限り、出力はある程度溜まらないとブラウザに送信されない。
0074nobodyさん2006/09/18(月) 22:07:49ID:???
あれ?じゃあ上までのレスを見てみて結局>>63の問題ってどうなるんだ?
0075nobodyさん2006/09/18(月) 22:12:19ID:???
何の問題もない、でFAだと思うんだが、何か問題が残ってるか?
0076nobodyさん2006/09/18(月) 22:21:45ID:???
結局>>68の求めているのはブラウザに返した後に
スレッドを実行したいみたいだが

FAだとしても現実問題の正解はなんだ?
phpのバグ?
Apacheのバグ?
環境の不備?
0077nobodyさん2006/09/18(月) 22:23:03ID:???
>>76
実際に実行したい処理を提示してもらわん事には
なんとも言えんだろう
0078nobodyさん2006/09/18(月) 22:35:36ID:???
>>76
> phpのバグ?
> Apacheのバグ?
> 環境の不備?
仕様の不理解、じゃないの?どっからバグなんて話が出てるのよ。

リクエスト/レスポンスに影響を与えずバックグラウンドで動作する処理を書きたい場合は
普通はsystem()辺りで標準出力/エラー出力をcloseしたプログラムを&付きで実行させる、
とかの手段を使うと思う。
0079nobodyさん2006/09/18(月) 22:58:33ID:???
>>78
>仕様の不理解、じゃないの?どっからバグなんて話が出てるのよ。
可能性の話だよ。プログラムにはバグは憑き物だから
当然理解不足だって可能性はある。

>register_shutdown_functionはレスポンス後に実行される関数と思っているのですが、
おれもそのように理解していている。

俺の理解も間違ってなかったとしたら
sleepした時間待たされてechoした文字が
レスポンスされるのはおかしいと思わないか?

0080nobodyさん2006/09/18(月) 23:01:56ID:???
>>79
ん?>>71で出てるようにそれは仕様じゃないの?
0081nobodyさん2006/09/18(月) 23:09:48ID:???
>>80
たしかに>>71が紹介した
ttp://php.plus-server.net/function.register-shutdown-function.html
echoに関してはにはそのように書いているが、同時にこのようにも書いている。
>シャットダウン関数はすべての出力バッファを閉じてからコールされます。
矛盾しているようにも思えるが、この仕様はどのように理解すればいいの?
0082nobodyさん2006/09/18(月) 23:11:42ID:???
>>81
コーヒーでも飲んで落ち着いてからマニュアル嫁

閉じるのは「出力バッファ」だ、どこが矛盾してるのか俺に教えてくれ
0083nobodyさん2006/09/18(月) 23:15:12ID:???
>>81
PHPの出力バッファ機能とブラウザへの出力コネクションは全然別の話。
出力バッファが閉じることで出力ハンドラを通した加工出力処理は一切使えなくなるが
出力そのものができなくなるわけでは無いのだよ。
0084nobodyさん2006/09/18(月) 23:31:16ID:???
>>82
今、酎杯呑んでるからコーヒーとのちゃんぽんは合わんな。

>>83
なるほどよくわかりました。

>>82もコーヒーでも飲んで落ち着いてから
このように教えてくれればいいのに。
0085nobodyさん2006/09/19(火) 00:13:12ID:???
またおまえか
0086822006/09/19(火) 00:42:29ID:???
>>84
頭が足りない方への配慮が欠けていたようですね。
0087nobodyさん2006/09/19(火) 01:43:35ID:???
頭が足りないやつがいるとこまるな。
0088nobodyさん2006/09/19(火) 01:49:40ID:sfulj2+A
>>63です。

>>78
具体的にはブラウザにレスポンスした後に
外部サーバ上のDBの更新したいとの思いからですが、
その更新は返って来るまで平均10秒くらい掛かって、
しかも外部の範疇の処理のため、チューニングなど手を加えることができず
そのためにはregister_shutdown_functionを使うことで対応できるかと
思って実験的にsleepで試したのですが・・・

そのような場合もsystem()など使うのが妥当なのでしょうか?
シェルを経由すると環境や共通関数など単純に流用できないですね。

ちょっと実機の環境で再度register_shutdown_functionを確認してみます。
0089nobodyさん2006/09/19(火) 02:00:47ID:???
shutdownコールバックはアボート時も含めて
プログラム終了時に必ず実行する処理を書くためのもので、
並列実行のスレッド処理を書くためのものじゃないだろう…

そもそも最大リクエスト数の制約を受けるApacheプロセスを
10秒も起動しっぱなしにさせてたら困ることが多すぎないか?
10秒もかかるDB更新をリクエスト毎に処理なんて無謀だから
俺だったら処理データをファイルなりローカルDBデータなりにセットしといて
cronで数分〜1時間おきくらいに動かしたバッチに処理させるな。
0090nobodyさん2006/09/19(火) 02:09:41ID:???
>>88
クライアントがわでタイムアウト扱いされるとやっぱ問題あり?
タイムアウトとして処理されていいのなら
http://jp.php.net/manual/ja/function.ignore-user-abort.php
こっちのほうが適切だとおもう。

タイムアウト扱いが嫌なら、systemとか使うしかないだろうな。
0091nobodyさん2006/09/19(火) 03:01:36ID:???
>>46
遅レスですが、ありがとう。
その正規表現でバッチリでした。
0092nobodyさん2006/09/19(火) 04:47:25ID:???
>普通はsystem()辺りで標準出力/エラー出力をcloseしたプログラムを&付きで実行させる、 
これについてやり方や実例が詳しく解説してあるページとかないですか?
0093nobodyさん2006/09/19(火) 05:24:15ID:???
>>92
unixシェルに関するページなら大抵あるのでは?

まぁ、あれだ
PHPマニュアルのUser Contributed Notesを読まないのは凄くもったいないと思うんだ。
http://jp.php.net/manual/ja/function.system.php
0094nobodyさん2006/09/19(火) 06:35:21ID:DMPs8Yp+
1.requireでhtmlファイルを読み込み・表示
2.echoでhtmlファイルの内容を出力

どちらのほうが負荷が小さいでしょうか?
0095nobodyさん2006/09/19(火) 06:44:29ID:???
そらまぁ、requireを使わない方が負荷は小さいけど
微々たるものだからメンテナンス性の方が重要よ?
0096nobodyさん2006/09/19(火) 07:38:27ID:???
repuireされる側に<?とかPHPタグがあったらやばくない?
0097nobodyさん2006/09/19(火) 08:04:37ID:???
>>95
メンテナンス性もいいのでrequireを使うことにしました。
ありがとうございます。
0098nobodyさん2006/09/19(火) 09:50:13ID:9qvktJUT
>>89
register_shutdown_functionを実機環境で試した結果。
やっと理解できました。
ブラウザには即時にレスポンスを返しますが、register_shutdown_function
で登録した関数がが完了するまでクライアントは次の操作を行えないようですね。
ということはregister_shutdown_functionでは要件を満たせないということで
この方法は却下します。

色々なご意見を参考に別な方法を検討したいと思います。
0099nobodyさん2006/09/19(火) 09:52:01ID:RXMAlMKx
基本画面で入力、確認画面、書込み処理画面
と、三段階にページをわけてます。
入力した情報を加工してから書込みを行いたいのですが、
基本画面で危険なコードを入力されたら確認画面で実行されされてしまうし、
確認画面で情報を加工しても、情報を改ざんされて書き込み処理画面で情報に
不正なコードが潜んでるかもしれません。
確認画面と書き込み処理画面の両方で加工したほうがよろしいのでしょうか?
0100nobodyさん2006/09/19(火) 10:18:04ID:???
[ブラウザ側]
基本画面で<form>に入力。
↓
[サーバ側]
入力されたデータの正当性チェックと、必要ならデータ加工。
データをセッションに保存。
↓
[ブラウザ側]
確認画面に内容表示。
確認ボタン(?)か何かクリック。
↓
[サーバ側]
セッションのデータを復元し、DBなどに書き込み。
↓
[ブラウザ側]
書き込み完了しました。とか表示。
0101nobodyさん2006/09/19(火) 10:36:33ID:???
>>99
お・・・ おいおい・・・・

お前の作ったシステムは恐ろしくて使えないな。
■ このスレッドは過去ログ倉庫に格納されています