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

【PHP】下らねぇ質問はID出して書き込みやがれ 84

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2009/04/27(月) 21:39:11ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 83
http://pc11.2ch.net/test/read.cgi/php/1238958898/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
08307832009/06/05(金) 20:43:27ID:fALDRgQl
>>829
聞きたいのは>>785の、
gzipでエンコードされたファイルをダウンロードしながら並行して解析するための
スマートなコードです
(自分のコードでも目的自体は達成しているのですが糞コードなので)

gzipでエンコードされたファイルをダウンロードしながら並行して解析すること自体が
不可能という意見を頂いたので、それを否定するための検証がダラダラと長くなりました
ご迷惑をおかけしました
0831nobodyさん2009/06/05(金) 20:51:40ID:???
>>827
すまん。考えてみれば当然か
いずれにせよgzip/deflateのブロックじゃないな
0832nobodyさん2009/06/05(金) 20:55:28ID:???
よそでやらせないのがこのスレの意義だろ
全方位天然くん歓迎だよ
0833nobodyさん2009/06/05(金) 22:16:31ID:???
gzipは最後まで読み込まないと解答できないよ
0834nobodyさん2009/06/05(金) 22:26:10ID:???
>>827,831
CURLOPT_BUFFERSIZEがあるよ
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTBUFFERSIZE
PHPレベルでのキャッシュもあるようだし、fdset()がどのタイミングでリターンするかは知らね
0835nobodyさん2009/06/05(金) 22:44:06ID:???
>>822
ログってどこに表示される何のログじゃろ?
0836nobodyさん2009/06/05(金) 22:56:04ID:???
某StringIOみたいなオブジェクトってない?
0837nobodyさん2009/06/05(金) 23:24:35ID:u1D4YO7O
mixiに以前登録した時のメアドがわからずログインが出来なくなりました…

解約して新規で携帯を買うしかないですか??
0838nobodyさん2009/06/05(金) 23:40:42ID:???
>>837
新しく作ればいいよ 大変だけど
SNSとかならオープンソースあるっしょ
0839nobodyさん2009/06/05(金) 23:41:13ID:???
>>836
http://jp.php.net/manual/ja/wrappers.php.php
のphp://memoryをSplFileObjectで使う、とか?
0840nobodyさん2009/06/06(土) 00:06:01ID:???
>>839
サンキュー検討するわ
つーかお前の発想の柔軟さに驚いた
0841nobodyさん2009/06/06(土) 00:10:14ID:???
なにこの偉そうな口調・・・
08428402009/06/06(土) 00:10:59ID:???
すまんまじすまん
08437832009/06/06(土) 01:07:42ID:nrE5UTqJ
検証関係はウザいでしょうからこれで最後にします(レスは歓迎します)
>811のサーバ用で使っているgzipファイルを
ある程度長くて著作権フリーなもの、ということで太宰治の人間失格を
圧縮した物を用います(本当は日本国憲法あたりにしたかったけど短すぎた)
サイズは非圧縮時で151,900バイト、圧縮時で67,671バイトとなっています
この圧縮ファイルを1秒に8192バイトずつ送信します。(9秒後に終わる計算になります)

クライアント側のコードは下記の通り書き換えて、
経過時間、解凍された文字列の文字数、解凍された文字列の最後の文字列
を表示するようにしています
0844nobodyさん2009/06/06(土) 01:11:06ID:???
>>834
PHPつうかハンドラのバッファ
ソケット叩いて回るようなレベルじゃパフォーマンスでねーから
08457832009/06/06(土) 01:13:14ID:nrE5UTqJ
$time = time();//コードの実行開始時間
$mh = curl_multi_init();
$conn=curl_init('http://www.example.com/foo.php');
curl_setopt($conn,CURLOPT_RETURNTRANSFER,1);
curl_setopt($conn, CURLOPT_ENCODING, 'gzip');
curl_multi_add_handle($mh,$conn);
$active = null;
$mrc = curl_multi_exec($mh,$active);
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
$tmp = curl_multi_getcontent($conn);
if (strlen($tmp)>=1){
echo '現在の経過時間は'.(time() - $time).'秒です<br>';
echo '解凍された文字数は'.strlen($tmp).'文字です<br>';
echo '解凍された文字列の最後「'.mb_substr($tmp,-64).'」<br>';
ob_flush();flush();
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
08467832009/06/06(土) 01:17:54ID:nrE5UTqJ
結果
現在の経過時間は0秒です
解凍された文字数は4738文字です
解凍された文字列の最後「たぎ越えるための頗る実利的な階段に過ぎないのを発見して、にわかに」
現在の経過時間は0秒です
解凍された文字数は16750文字です
解凍された文字列の最後「ました。ほとんど完全に近く人をだまして、そうして、或るひとりの全」
現在の経過時間は1秒です
解凍された文字数は16750文字です
解凍された文字列の最後「ました。ほとんど完全に近く人をだまして、そうして、或るひとりの全」
現在の経過時間は1秒です
解凍された文字数は35377文字です
解凍された文字列の最後「ナした。自分なども、ゴッホの原色版をかなりたくさん見て、タッチの磨v
現在の経過時間は2秒です
解凍された文字数は35377文字です
解凍された文字列の最後「ナした。自分なども、ゴッホの原色版をかなりたくさん見て、タッチの磨v
現在の経過時間は2秒です
解凍された文字数は53886文字です
解凍された文字列の最後「、邸宅と召使いを提供して置くのも、むだな事だとでも考えたのか、(」
現在の経過時間は3秒です
解凍された文字数は53886文字です
解凍された文字列の最後「、邸宅と召使いを提供して置くのも、むだな事だとでも考えたのか、(」
現在の経過時間は3秒です
解凍された文字数は72654文字です
解凍された文字列の最後「好都合な事になり、やがて自分が自殺幇助(ほうじょ)罪という罪名で」
現在の経過時間は4秒です
解凍された文字数は91351文字です
解凍された文字列の最後「オなけれゃいけないんですから。いいえ、でも、せっかくの御自慢のおav
(略)
08477832009/06/06(土) 01:21:00ID:nrE5UTqJ
>>833
というわけで、gzipの最後がサーバから送られてくるのは
>>843の通り9秒後なのですが
9秒後以前に途中まで解凍できています
0848nobodyさん2009/06/06(土) 02:03:19ID:???
>>839
ありがとう
ほとんどコンストラクタだけのクラスでごまかせそうだ
0849836,8482009/06/06(土) 02:07:31ID:JWHRbWFk
なんか騙られたと思ったらID必須ってことを言いたかったのか?
いやはや申し訳ない
また何かあればよろしくお願いしますー
0850nobodyさん2009/06/06(土) 02:12:45ID:???
某rubyとか隠す必要あんの?
0851nobodyさん2009/06/06(土) 02:46:03ID:???
>>850
Rubyの専売じゃないと思うけどな。
PHPでは文字列型は可変だし、IOというinterfaceがあるわけじゃないから
個人的にはあまり必要ないと思ってしまう。。
みんな意外にOOPしてるのだろうか。
0852nobodyさん2009/06/06(土) 03:13:16ID:???
>>851
ごくたまにファイルと文字列を透過的に
扱いたいことはある
0853nobodyさん2009/06/06(土) 03:52:57ID:???
>>845
一切変わってなくてワロタ
分かっててやってるなw
0854nobodyさん2009/06/06(土) 04:26:42ID:???
>>852
データ型によってコードをわけないということだよね。
しかし組み込みのinterfaceはないのだし、
オレ仕様のやつを自前で用意するものなのか。
例外についても同じく。。
0855nobodyさん2009/06/06(土) 04:40:53ID:???
>>854
わからんけどインターフェースが必要ない動的言語だからこそアドホックにファサードつくればいいって話じゃね?
javaじゃあるまいし
0856nobodyさん2009/06/06(土) 04:42:19ID:???
もうネロ
0857nobodyさん2009/06/06(土) 05:27:45ID:???
ネットワークプログラミングって受信は甘く送信は仕様に厳しくとかいうけどさぁ、
おまえら守ってる?
俺は時間なくて手抜き実装してるううううううううう!!!!!!1

ハァースッキリした
0858nobodyさん2009/06/06(土) 08:26:27ID:C5LE110H
例えば1000人同時にログインしたらMYSQLのデータって外部に漏れるもんなんでしょうか?
0859nobodyさん2009/06/06(土) 09:51:10ID:???
じゃあ、Yahoo!とか漏れまくりで大変だな
0860nobodyさん2009/06/06(土) 11:21:28ID:???
>>858
なんでそう思うの?
0861nobodyさん2009/06/06(土) 11:43:17ID:???
関係ないけどちょっと聞いてくれよ
ケータイSoftbankに替えてありきたりなメールアドレス登録したんだよ
そしたら前にそのアドレスを使ってた人へのメールが知人やらメルマガやらどんどん入ってきて個人情報だだもれなわけ
今じゃすっかりその人に詳しくなって、おばあちゃんとのメールも無難にやりとりできるまでになったぜ
オマエラもSBのメールアドレスを手放すときは気をつけなさいってこった
0862nobodyさん2009/06/06(土) 18:12:17ID:aSUnZuuU
日本語の文書を一文字ずつ配列に入れたいのですが
どのようにすれば可能でしょうか?
0863nobodyさん2009/06/06(土) 18:21:59ID:???
mb_splitとかpreg_match_allとかならできそうだが
0864nobodyさん2009/06/06(土) 21:56:26ID:???
>>862
mb_strlen + mb_substr
0865nobodyさん2009/06/07(日) 01:33:43ID:???
utf8ならpreg_splitを//でできるよ
08667832009/06/07(日) 01:49:50ID:QFeNdjN7
>>786,790
gzopen('http:www.example.com…
とやろうとしたのですが、この方法だと
Accept-Encodingヘッダを出力してくれないため
サーバーからは圧縮されないままレスポンスが返ってきます。
fopenで使えるようなコンテキストがgzopenでも使えれば
ヘッダの設定ができたんですけどね

>>801
教えていただいた
>$fp = fopen("compress.zlib://http://some.website.org/example.gz", "r");
これならいけそうかな、と思ったのですがコンテキストが設定できるのは
一番左のcompress.zlib://だけでhttpには設定できないようです。
という訳でこれも圧縮されないままレスポンスが帰ってきてしまいました。
gzopenにしろこれにしろ、もともとgzipに圧縮されているファイルにしか
使えないのではないかと思います
08677832009/06/07(日) 04:18:14ID:QFeNdjN7
>>821
chunked転送コーディングに対して誤解をされているように感じます。
chunked転送コーディングは
・http1.1でkeep-aliveを行った際に
・Content-Lengthがヘッダ発行時に未知であるため
どこがレスポンスの区切りとなるのか分からない
場合に用いるものです。
今回の例では1秒ずつsleepさせているのでいかにもそこでchunkedされそうな気がしますが、
そもそもkeep-aliveを行っていないので、サーバ側にとってchunkedする必要は全くありません

とは言っても納得できないでしょうから、
cURLをchunked転送コーディングの使えないHTTP1.0に設定しても
curl_setopt ( $conn , CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_0 );
同じ結果が得られました まんこ
0868nobodyさん2009/06/07(日) 06:11:53ID:TrHKanMz
フォームの値の渡し方について教えてください
入力>確認>登録 の流れのフォーム作ってます、そこで
事情より、確認画面では <input type="hidden" value="serialize($_POST);" />して、情報を登録画面にもちこんでます
(実際のvalueはシリアライズ値を入れた変数です)

このとき、入力画面で
<input type="text"> に「Don't let me down」を入力し、
<textarea> に 以下(Youtubeの動画の埋め込みタグ)を入れるとhiddenタグが壊れてシリアライズした中身が
画面に出てしまいます。
 <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/-O7PnvVgQvA&hl=ja&fs=1&">
 </param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always">
 </param><embed src="http://www.youtube.com/v/-O7PnvVgQvA&hl=ja&fs=1&" type="application/x-shockwave-flash"
 allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

「$_POSTをserializeして引き渡し」の仕様を変更することなく、このトラブルを解決する方法あるでしょうか?
すみませんが、アドバイスお願いします
0869nobodyさん2009/06/07(日) 07:49:10ID:e7V9OxY3
$data = array("1","2","3");

//1
$fp = fopen("log.dat",r);
fwrite(join("\n",$data));
fclose($fp);

//2
$fp = fopen("log.dat",r);
while (list($tmp, $data2) = each($data))
 fwrite($fp,$data2."\n");
fclose($fp);

どちらが鯖に優しいですか?
0870nobodyさん2009/06/07(日) 07:50:19ID:???
urlencode(serialize($_POST))かな?
あとhiddenにname属性がないけど
0871nobodyさん2009/06/07(日) 10:14:30ID:???
>869
> fopen("log.dat",r);
'r'と文字列で指定しろ。
ついでにrは読み込み専用だから書き込めない。詳細はfopenのマニュアル嫁。
ttp://jp2.php.net/manual/ja/function.fopen.php

どっちが優しいかといえば、そんな下らない部分を最適化する時間を他の処理を見直す時間に回すのが一番鯖に優しい。
ファイルでデータを保持するって時点でかなり高コストなんで、とりあえず2chで下らん質問してる時間でDBの勉強でもするのがベスト。
どうしてもどちらかというならば、fwriteの呼び出し回数が少ないほうが鯖に優しい。つまり前者。
(調べてないが、もしかしたら書き込みを一時的にメモリに保持(バッファ)して、ファイル書き込みは閉じる瞬間に行なう仕様かもしれん、だとしたらどっちでも同じ)
0872nobodyさん2009/06/07(日) 11:48:46ID:???
初心者ながら自作サイトを作成しているのですが、なぜか作成したページが
「疑わしいWebページを遮断しました」とノートンが反応するようになりました。
ソースが長いので記載はできないのですが、内容はmailtoで送信するための
名前やメアドを入力した後の「以下の内容で間違いないですか?」みたいな
画面です。値はメアド入力画面から$_POSTで受けとってます。
遮断される可能性としてはどのようなものがありますでしょうか?
すいませんがアドバイスを御願いします。
0873nobodyさん2009/06/07(日) 11:51:07ID:???
すいません。テンプレみてませんでした。上記の質問は取り消します。
お騒がせしました。
0874nobodyさん2009/06/07(日) 23:51:57ID:B+22q93B
カウンターのデータがたまに吹っ飛びます。

PHPのカウンターのサンプルを公開してるサイトはいくつもありますが
作る人によってロックするタイミングが違うみたいです。


fopenした後、ロックしてからカウント増やすのか、カウント増やしてからロックするのか、
どちらが正しいのでしょうか?


自分が使ってたのは

$f=file("log.log");
$f=$f[O]+1;
$fp=fopen("log.log","w");
ロック
fwrite($fp,$f);
クローズ

これって消える可能性ありますか?
wで飛ばした時には既に$fに数字が入っているからちゃんと書き込めると思うのですが。
0875nobodyさん2009/06/08(月) 00:06:15ID:???
ロックは一番最初だろ
0876nobodyさん2009/06/08(月) 00:24:53ID:???
>>874
それだと、読み〜ロックの間に他の人が読んだら値がおかしくなるよ。

でも消えるかなぁ。。
ロック失敗したときどうしてる??
0877nobodyさん2009/06/08(月) 01:02:13ID:???
それ用のロックファイルかディレクトリを作るのが確実
file()はロックされてても読めるんじゃなかったっけ。
そのせいで書き込み途中のファイルを読み込んでしまい
結果飛んでしまうと。
08788742009/06/08(月) 01:22:30ID:f7LhTlLY
>>875ー877
ありがとうございます。
>>877さんので納得しました。
ロック用のファイルってどういう事ですか?
一時的にバックアップ取るという事?

>>876
ロック失敗とか全然気にしてないです。
失敗したら書き込めないようにif構文とか作った方がいいのですか?
0879nobodyさん2009/06/08(月) 02:33:33ID:???
file()がだめならfread()でいいじゃん
といったらそうでもなくて、バッファ0にして fread fwriteでも飛ぶときは飛ぶ

http://www.google.co.jp/search?q=php+flock+%E3%83%AD%E3%83%83%E3%82%AF%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA&num=50&ie=utf-8&oe=utf-8&lr=lang_ja
0880軟式PHP2009/06/08(月) 11:08:46ID:???
flockをfopenした時にlockが効くと勘違いしてる人が多い。
flockはflockとの競合を防ぐだけだから、他のプロセスがflockしてても
fopenのwで開けば0バイトで作成されるからそりゃ壊れる。
予めファイルを作成しておいて、r+で開いてflockかけるとか877の言うように
別ファイルでロックするのが定石だろう。
0881nobodyさん2009/06/08(月) 12:22:26ID:SxkJ/CwY
メール送信時にヘッダに含めるFromの値に、次のような文字列を入れようとするとエラーが出てしまいます。
hoge-hoge.com<info@example.com>
エラーの内容は、この文字列のバリデーションに失敗、というものです。

サーバーがSMTP認証を行うようになったのに合わせて、
mb_send_mailからPEAR::Mailに変えたところ、このエラーが出るようになりました。
hoge-hoge=>ドットを含まない英字や、ドットを含むがMIMEエンコードした日本語=>ほげ-ほげ.コムでは大丈夫なので
ドットに対して何らかのエスケープをすればよいと思うのですがわかりません。
mb_send_mailが中で対処してくれていたのか・・・

処理方法があればおしえてください。
0882nobodyさん2009/06/08(月) 16:46:37ID:???
質問です。
file関数でエラー検出するとき、よくあるのは

@file("http://hoge.com") or die("Error!");

というように、or dieがありがちだと思うんですけど、
orのあとって、return falseとかできないんですかね?
どうもエラー出るみたいなんですけど。


関数内でエラー検出し、エラーならfalseを返すというようにするには、そうすればよいでしょうか?
0883nobodyさん2009/06/08(月) 16:52:54ID:???
自己解決。
こんな感じでいけました。


function get2ch()
{
$err = 0;
$lines = @file("htp://2ch.net") or $err = 1;
if ( $err ) { return false; }
return true;
}

でもreturn使えないのはめんどいですね。
08848682009/06/08(月) 16:53:33ID:5Fnyhx60
>>870
どうもありがとうございました

思ったんですが、確認ページから登録ページへの値の渡し方って
$_SESSION['postAry'] = $_POST; ってやって、
登録ページでは
INSERT INTO $table (`var`) VALUE($_SESSION['postAry']['var']);
とかした方がいいんでしょうか?
みんなこんな感じでやってるんですか?
0885nobodyさん2009/06/08(月) 17:05:27ID:???
>>883
fileやfopenは失敗するとFALSEを返すから

$lines = @file(filename);
if (!$lines) return FALSE;//失敗すると$lines===FALSEとなる

見たいな感じでも大丈夫だよ
0886nobodyさん2009/06/08(月) 18:19:14ID:???
returnで真偽を判定するまでもなくfile()で判別すりゃいいじゃん
0887nobodyさん2009/06/08(月) 18:24:57ID:???
もともと 偽が返ってきたら右側も判定する、という or の性質を利用してるだけなんだから
真偽を返すもの以外を使うなら普通にif文でいいわな。
0888nobodyさん2009/06/08(月) 18:33:42ID:9VTPEhgM
PHPでGD使ってるんですがサーバーにeAcceleratorとか入れたら処理速度あがりますか?
0889nobodyさん2009/06/08(月) 19:09:05ID:???
ファイルオープンとsessionについて教えてください。

通常の動きはAのページで
フォームに入力したデータをPOST送信⇒Bのページへジャンプ

BのページでPOSTされてきたデータをsessionに保存⇒Cのページへリダイレクト

Cのページでsessionに保存されたデータを元にページを表示

この動きをフォームを使わずにCのページを期待通りのページで取得したいんですが
まず、fsockopenでBのページへ直接、POSTデータをfputsして
file_get_contentsとかfileとかreadfileでCのページを読みに行くと
sessionが違くなってしまうためか期待通りのページが取得できないんです
file_get_contentsとかでsessionを引き継いだままページを取得する方法ってありますか?

教えてください偉い人
0890nobodyさん2009/06/08(月) 19:40:52ID:???
Bでレスポンスのヘッダー内にCookieが帰ってくるはずだから、それを次のCのヘッダーに入れる
08918892009/06/08(月) 20:06:04ID:RF6d0qBM
>>890
var_dump(apache_request_headers());
コレと

<?php
// ストリームを作成します
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);

$context = stream_context_create($opts);

// 上で設定した HTTP ヘッダを使用してファイルをオープンします
$file = file_get_contents('http://www.example.com/', false, $context);
?>
コレですか?
0892nobodyさん2009/06/08(月) 20:16:41ID:???
スパム業者乙
0893nobodyさん2009/06/08(月) 20:20:25ID:???
スパムならここで質問するのはやめていただきたい
08948892009/06/08(月) 20:27:36ID:RF6d0qBM
>>892-893
ちげーよウェェエン
08958902009/06/08(月) 20:30:50ID:???
おれも教えないほうがよかったか・・

>>889
なんの処理に使うの?
ってかそのABCは自分のサイトのページではないよね?
08968892009/06/08(月) 20:38:58ID:RF6d0qBM
ランキングサイトへの情報更新に使います

沢山あるから一括してやりたいんですよ
すぱむじゃねーよ
0897nobodyさん2009/06/08(月) 21:26:32ID:???
やっぱすぱむだったかw
0898nobodyさん2009/06/08(月) 21:59:17ID:???
ワロタ
08998892009/06/08(月) 22:43:46ID:RF6d0qBM
でけた
$context_options = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($data) . "\r\n",
'content' => $data
)
);

$context = stream_context_create($context_options);
file_get_contents("http://example.com/",false,$context);
var_dump($http_response_header);

$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Cookie: foo=var\r\n"
)
);
$context2 = stream_context_create($opts);
$file = file_get_contents("http://example.com/owner.php?mode=update",false,$context2);
var_dump($file);
0900nobodyさん2009/06/09(火) 00:19:48ID:???
>888
GDの処理速度自体は当然変わらない。
PHPスクリプトが動き始めるまでの時間は普通どおり短くなる。どの程度速くなるかは検索でもしてみれ。

ざっと考えたけど、リクエスト数が大きめならスループットは改善すると思う。
リクエストが多いわけじゃないなら、それほど高速化は期待できない。
0901nobodyさん2009/06/09(火) 04:19:06ID:k9to3OUt
自動でphpをしたく、wgetをコマンドプロンプトでやっていたのですが、
リトライがうまく行きません。
-t 1000 と -w 300 を書いたのですが、一度実行されて
終了してしまいます。
wget --save-headers --timeout=600 -t 1000 -w 300 -O $loginhtml --no-cache --no-check-certificate http://localhost/hogehoge/hoge.php?hoge=hoge 2>&1

というような感じで、一回だけなのですが
http://localhost/hogehoge/hoge.php?hoge=hoge
のプログラムはちゃんと実行されていました。
http://localhost/hogehoge/hoge.php?hoge=hogeが一回終了するまでは60秒かかります。)
スレ違いぽいですが何かアドバイスよろしくおねがいします
0902nobodyさん2009/06/09(火) 04:29:07ID:7d8qt2bF
http://pc11.2ch.net/test/read.cgi/gamedev/1238520070/692

692 :名前は開発中のものです。:2009/06/09(火) 00:57:34 ID:2fI/sHFo
何言ってんだ。プログラマにまともな精神持った奴がいた試しなんてねえよ。
第一プログラマと精神科なんてほとんどセットなのに今更それを語るとか情弱以下だろ。
0903nobodyさん2009/06/09(火) 04:44:10ID:???
>>901
wgetのことは全然詳しく無いので月並みに言えば
オプション減らしたり普通のWebページが取れるか試してみたりして原因の切り分けしてみては?
0904nobodyさん2009/06/09(火) 06:18:41ID:k9to3OUt
>>903
書くのを忘れていましたがosはwindowsでしたすいません。
そして、あれからいろいろと試していると
どうやらwindowsだとwgetだけでは無理みたいでして、
タスクスケジューラーを使うとうまくいきました。
ありがとうございました!
0905nobodyさん2009/06/09(火) 11:27:56ID:???
エラーログを出力し、メールで送信してくれるクラスライブラリを探しています。

PHP内部エラーではなく、自分で指定した条件
(例えば、DBから取得したデータにバリデートをかけたらfalseだった、とか)
に応じてログファイルに時間やエラー内容等を記録し、
最後にメールに通知してくれるようなのを探しています。

自分で作れないこともないとは思いますが、多くの人に利用されていて、
実用に耐えているものであれば、そちらを使ってみたいと思っています。
0906nobodyさん2009/06/09(火) 11:53:30ID:???
ライブラリ作って公開するまでもなく即行で書けないか?
メール送信くらいは既存ライブラリ使ってもいいけど
0907nobodyさん2009/06/09(火) 12:03:59ID:???
ちょっとPHPとは離れてしまうけど

PHPでエラーが起きたときにメールでアラートをあげるって事だよね?
PHPでログ出力するんだから同時にメールも送れれば良いと考えるのはわかる。

でもそういう時に俺なら、ログ監視(というかサーバ監視)する別アプリをたてるけどな。
商用ならJP1とかopenviewとか千手とか、フリーならzabbixとか。
0908nobodyさん2009/06/09(火) 12:28:17ID:???
素朴な疑問なんだが、処理が書かれたphpをブラウザで接続したとき
その処理に一回数分かかるとして、処理するのもphpだけだとすると
その処理中にブラウザ閉じられても処理は最後までやってくれるのかお
echoとかはなしとして
0909nobodyさん2009/06/09(火) 12:42:17ID:1S65lMji
>>908
開いてリクエスト全部送信したら処理始める

だったような気がする
閉じても処理は続く
0910nobodyさん2009/06/09(火) 13:30:37ID:OwEGJi1t
変な質問ですけど、2,3年前にEUC-JPで作ったプログラムを
カスタマイズする必要性が出てきたのですが、
自分は今UTF-8で作ってて、ライブラリもすべてUTF-8です。

そこで質問ですが、古いプログラムに手を加える時
文字コードはどうした方が良いですか?新しくするべきですか?
それともそのままの文字コードで作っていった方が良いですか?
0911nobodyさん2009/06/09(火) 13:33:06ID:1S65lMji
>>910
新しくってUTF-8がECU-JPより新しいという概念で文字コード決めてるのか?
0912nobodyさん2009/06/09(火) 13:42:24ID:OwEGJi1t
>>911
いえ。フリーライブラリなど、UTF-8の文字コードが多いので
それらを使う時使い勝手が良いと思ったからです。
しかし、手間がかかるし、通常はどうするべきなのか悩んでいます。
0913nobodyさん2009/06/09(火) 13:45:31ID:???
通常は動作に問題無いものに手を加えたりはしないな。
今後会社としてUTF-8で統一するから、カスタイマイズついでにUTF-8にしておこうというのも有りだとは思うけどね。
0914nobodyさん2009/06/09(火) 14:08:30ID:OwEGJi1t
そうですよね。今動いているのをあえて変更すると
バグやエラーの原因になりますよね。

今のまま拡張していきます。アドバイスありがとうございました。
0915nobodyさん2009/06/09(火) 14:51:07ID:???
amazonの新刊情報を抜き出すプログラムって素人がすぐ作れるもの?
毎日1時にcronでプログラムを実行すればいいらしいまでは分かったのですが・・・

下記サイトと同じようなものを作りたいのです。
さくらのレン鯖プレミアム契約してます
ttp://booksales.seesaa.net/
0916nobodyさん2009/06/09(火) 15:06:37ID:???
>>915
どういう方法で新刊情報が入手可能かしらないけど、
・アマゾンがRSSを提供してたら簡単。「php rss」とかで検索
・アマゾンAPIを使用するとちょい厄介。「php amazon web service」等で検索
・アマゾンサイトのHTMLから抽出だと知識によっては困難。これは正規表現の知識が必要。

3番目以外は検索すればサンプルが結構出てくる。
0917nobodyさん2009/06/09(火) 15:26:09ID:???
>>916
RSS配信されてました
Parser.phpとRSS.phpとかいうスクリプトがあるのでそれ使ってやってみます
ありでした
09189082009/06/11(木) 09:56:02ID:KxCPVwHi
<?php
$id = 1;
if($id === 1)
{
echo "成功";
//ここに数分かかる処理 ・・[1]
}else{
echo "失敗";
//ここに数秒で終わる処理・・[2]
}
?>

というものがあって、今は[1]の処理が終わるまで、
ブラウザにはechoした結果が表示されないと思うのですが、
何よりも先にとまでは行かなくとも、
長い[1]の処理が始まる前に、ブラウザの読み込みの間を無視して
成功の文字を表示させることはできますでしょうか?
考えたのが、コマンドを使って[1]の処理を別に実行させて、
成功の文字を表示させて、というものなんですが、
もっとお手軽な方法があれば教えてください。

>>909さんの言われる通り、ある程度ブラウザを開いてから
読み込み中であっても途中で閉じても、実行されていました。
ここまで処理ができたら、ここから下はこちらでやっておくのでブラウザ閉じようが何しようがおk
みたいな処理ができれば、と

php 5.2.6ですよろしくお願いします。
0919nobodyさん2009/06/11(木) 10:44:21ID:uw+H+MOK
10000000*3/100/12*(1+3/12/100)^(20*12)/((1+3/100/12)^(20*12)-1)

という複雑な計算を行いたいのですが、
^(20*12)の部分で数字が膨れ上がりすぎてINFという文字を返してきてしまいます。
どういう記述を行えば計算することが可能でしょうか。
ご存じのかたいらっしゃいましたらご教授いただけると幸いです。
0920nobodyさん2009/06/11(木) 10:47:00ID:???
php、多倍長とかで検索してみるといいかも
0921nobodyさん2009/06/11(木) 11:48:34ID:JdN0MC7Y
ページングするときページやアイテムの合計数はどうやって受け渡ししするのが一般的ですか?
セッション(クッキー)、クエリなどありますよね。
セッションはなんか不安定そうで避けてるんですが。
0922nobodyさん2009/06/11(木) 12:01:57ID:???
>>918
flush()で文字だけ先に表示させることは可能だけど、ブラウザは閉じたら処理もとまるから、コマンド投げる方法しかないと思うよ。
0923nobodyさん2009/06/11(木) 12:07:09ID:???
>>921
渡すデータが4,5個くらいまでだったらGETクエリで良いと思うよ
あと合計件数はそのページをブックマークされると困るし変動する可能性もあるから、
一般的にはリクエスト時に毎回DBとかから合計件数を取得してから必要なデータを抜き出す。
0924nobodyさん2009/06/11(木) 12:15:06ID:JdN0MC7Y
速度を上げるために一回目のSQLクエリで総数を出して、GETクエリで渡してるんですが
毎回カウントするのが普通なのでしょうか?
あまりGETクエリで渡してるサイト見かけないのでセッションが多いのかと思ったんで...
0925nobodyさん2009/06/11(木) 12:27:21ID:???
その「総数」が毎回カウントしなくても平気なモノならいいけど
別セッションから書換えられるようなモノなら毎回取得しないとまずいんじゃないの?

その「総数」をDBから取得する処理は、速度が気になる位、重い処理なの?
0926nobodyさん2009/06/11(木) 12:51:22ID:JdN0MC7Y
管理者側でしか書き換えないテーブルが多いので毎回カウント必要ない部分が多いです。
たしかに掲示板とかは書き換わる可能性があるので毎回取得したほうがいいですね。
件数はせいぜい数千件までぐらいです。
問題はトラフィックが非常に多いサイトもあるので少しでもサーバーの負担を減らしたいなと思っての処理です。
0927nobodyさん2009/06/11(木) 13:24:42ID:???
>>918
phpファイルをcgiみたいに扱って
コマンドラインでバックグラウンド実行させればいい。
実行したいPHPが、test.phpなら本体のphpから

exec('php test.php &');

みたいにすると、test.phpがバックグラウンドで動く。
0928nobodyさん2009/06/11(木) 13:28:00ID:???
まぁ一般的には総件数は毎回取得。
負担が気になるならDBのキャッシュを有効にしたりとかしてもいいし。
ネックにならないような箇所をクオリティを下げてまで最適化するのは推薦はしない。

総件数をどうしてもセッションで保持するならついでにページもセッションの方がいいかもね。
0929nobodyさん2009/06/11(木) 13:37:12ID:JdN0MC7Y
>>928
ありがとう、参考にさせてもらいます。
みんなそんなには件数もちまわしてないってことですね。
レス数が900を超えています。1000を超えると表示できなくなるよ。