【PHP】下らねぇ質問はID出して書き込みやがれ 83
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/04/06(月) 04:14:58ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 82
http://pc11.2ch.net/test/read.cgi/php/1236532468/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0157nobodyさん
2009/04/09(木) 23:40:47ID:???0158nobodyさん
2009/04/10(金) 00:12:42ID:???たぶん君も知識が足りないと思うんだがfxのタイトルバーの色が何色か見てごらん
あとoperaもな
大丈夫^^?
0159nobodyさん
2009/04/10(金) 00:18:26ID:???角丸つくるのにいまだに透過ジフ?w
0160nobodyさん
2009/04/10(金) 00:22:27ID:???0162nobodyさん
2009/04/10(金) 00:28:34ID:z5toBuCmファイルを一意な名前で renameする良い方法ないですか?
tempnam を使ってファイル名を生成すると、その時点でファイルが生成されてしまうため、
renameできません。tempnam で作った後に unlinkするのは、やっぱり気分が良くないし、
厳密には一意性が保証されない気がするので。
0163nobodyさん
2009/04/10(金) 00:29:13ID:???<title>好きなタイトル</title>を出力するしかない
0165nobodyさん
2009/04/10(金) 02:28:23ID:bYC4ar8CそれがHoge::moge()の形で呼ばれたのか、
$hoge->moge()の形で呼ばれたのかを判別するにはどうしたらいいですか?
0166nobodyさん
2009/04/10(金) 02:53:25ID:???0168nobodyさん
2009/04/10(金) 09:47:55ID:???0169168
2009/04/10(金) 09:48:47ID:???0170nobodyさん
2009/04/10(金) 10:13:06ID:0gMhmbJC0171nobodyさん
2009/04/10(金) 10:32:51ID:BYyPBH+iこのような場合はforを使うのが普通なのでしょうか?
よろしくお願いします。
0172nobodyさん
2009/04/10(金) 10:38:07ID:???>foreach を 配列の途中から始めることはできますでしょうか?
できないけど結果として同じものを得るのは可能
>このような場合はforを使うのが普通なのでしょうか?
はい
0173171
2009/04/10(金) 10:53:33ID:BYyPBH+iレスありがとうございます。
やはりforを使うのが普通なのですね。
いちおう、後学のためにforeachを使って途中から開始する方法も教えていただけないでしょうか?
0174nobodyさん
2009/04/10(金) 10:58:47ID:???seekしてiterator使った方がいいよ。
0175nobodyさん
2009/04/10(金) 11:03:41ID:???途中から開始するわけではなくて無駄な分はしっかりまわす感じ
whileでやるようなやり方
$array = array(1, 2, 3, 4, 5);
for ($i = 2; $i < count($array); $i++) {
echo $array[$i];
}
$count = 0;
foreach ($array as $value) {
$count++;
if ($count > 2) {
echo $value;
}
}
0176nobodyさん
2009/04/10(金) 11:11:03ID:???foreach (array_slice($array, N) as $value) こうやるのが普通?かな
0178173
2009/04/10(金) 11:20:09ID:BYyPBH+iすみません。
知識不足で「seekしてiterator」というのがわかりません;
>>175
なるほど・・・
こうしてみると、たしかに後者は無駄が多いですね。
>>176
array_sliceで途中から取り出すというのは思いつきませんでした!
これは使えそうですね!
0179nobodyさん
2009/04/10(金) 11:32:44ID:???プチマジレスするとforeachの中でarray_sliceすると回すたびに関数が実行されるから
一度別の配列に入れるのがいい
0180nobodyさん
2009/04/10(金) 11:41:47ID:???0181nobodyさん
2009/04/10(金) 11:44:44ID:???以下のようにするとhogeが一度しか表示されないのはループの度にarray_sliceは実行されてfooは最初の一度だけってこと?
function foo()
{
echo "hoge<br>\n";
return array(1, 3, 5, 7, 9);
}
foreach (array_slice(foo(), 2) as $value) echo $value,"<br>\n";
0182nobodyさん
2009/04/10(金) 11:50:13ID:???$ai = new ArrayIterator(array(1, 3, 5, 7, 9));
$ai->seek(2);
while ($ai->valid()) {
echo $ai->current();
$ai->next();
}
0184nobodyさん
2009/04/10(金) 11:55:38ID:FoG5RXFZ80番ポートでアクセスしたとか8080番ポートでアクセスしたとか何番ポートを使ってアクセスしたかを調べたいのですが
どのような関数を使うのでしょうか?
0186nobodyさん
2009/04/10(金) 12:00:54ID:/dNSLV40文字列フィルタについて質問です
上記ページと公式サイトには例が4つまで載ってるのですが
これはあくまでも一例で他にもあるのでしょうか?
もしよろしければ掲載されてないコードをご教示お願い致します
0187nobodyさん
2009/04/10(金) 12:01:22ID:???こうやってもhogeは一度だけ表示されるけどもしかしてarray_sliceって特別な実行のされ方?
function slice2()
{
echo "hoge<br>\n";
return array(1,3,5);
}
foreach (slice2() as $value) echo $value,"<br>\n";
0188186
2009/04/10(金) 12:01:35ID:/dNSLV40以後、気を付けます
0189nobodyさん
2009/04/10(金) 12:02:41ID:???よく読んだらこう書いてありますね
for ($i = 2; $i < count($array); $i++) {
echo $array[$i];
}
0190nobodyさん
2009/04/10(金) 12:24:25ID:???配列の長さ取得するのってPHPだとcountじゃないの?
JavaやJavaScriptでいうlengthと一緒だよね?
0191nobodyさん
2009/04/10(金) 12:54:09ID:???なんかオフセット的なパラメータが出てくるのはうざったい。
自分の作ったコードでgrepしたら foreachの 1/10 以下だった。
while は半分ぐらい。
>>190
javascriptは微妙だけどね。
いきなり配列に x[100] = 'hogehoge'; とかすると、length は 101 になるくせに、
for(in) だと登録した1つしか出てこないし。そのわりに join は 101個結合するし。
0192nobodyさん
2009/04/10(金) 12:56:45ID:???でも、大抵 foreach 文で処理しちゃうけどね...
0193178
2009/04/10(金) 12:58:57ID:BYyPBH+iそうだったんですか!
ということは、for($i = 1; $i < count($array); $i++)
のように書いた場合も、毎回count()が実行されるのでしょうか?
一度 $count = count($array)
のようにしたほうがいいですか?
>>182
ArrayIteratorというクラスがあったんですね。
ややコードが長くなりますが、配列が直感的に操作できますね!
配列のループだけでもいろいろなやり方があって、勉強になります!
質問してみてよかったです!
0194nobodyさん
2009/04/10(金) 13:04:28ID:???function testAry() {for($a=0;$a<100;$a++) $h[]=$i;return $h;}
// タイム測定
function bench() {return microtime(true);}
// ベンチマーク表示
function cale($time) {
echo "<pre>";print_r($time);echo "</pre>";
foreach($time as $t) {echo "<p>".($t[1]-$t[0])."</p>";}
}
// --------- 比較コード ---------------- */
$time[0][0]=bench();
$test = array();
$cnt=count(testAry());
for($i=0; $i<$cnt; $i++) {$test[]=$i;}
$time[0][1]=bench();
// ---------- 175のコード ------------- */
$time[1][0]=bench();
$test = array();
for ($i=0; $i<count(testAry()); $i++) {$test[]=$i;}
$time[1][1]=bench();
/* ---------- ここまで ---------------- */
cale($time);
0195nobodyさん
2009/04/10(金) 13:05:15ID:???マニュアル読め。
http://jp.php.net/manual/ja/control-structures.for.php
>この書き方には問題があります。 このコードは実行速度が遅くなることでしょう。 配列のサイズを毎回計算しているからです。 ...
>>179 の意味がイマイチ取りきれんのだけど、foreach がループ回数分だけ式を評価するってのは初耳。
ちょっとありえんと思う。
0196nobodyさん
2009/04/10(金) 13:06:32ID:???ベンチマーク結果
0.00026893615722656(countをforから外したコード)
0.016515970230103(>>175と>>185が進めるのコード)
0199nobodyさん
2009/04/10(金) 13:08:59ID:???そういうこと
foreach (array_slice(foo(), 2) as $value) echo $value,"<br>\n";
fooは一度しか呼び出されないが、配列の数だけarray_sliceが動いてる
0201nobodyさん
2009/04/10(金) 13:14:39ID:???マニュアルを読む限り、foreach が式をループ回数だけ評価するようには読めないんだけど。
っていうか、foreachが式が関数の場合に、関数は評価するが、その引数は評価しないとか、ありえんと思うが。
http://jp.php.net/manual/ja/control-structures.foreach.php
0202nobodyさん
2009/04/10(金) 13:16:50ID:???0204nobodyさん
2009/04/10(金) 13:21:58ID:???function testAry() {for($a=0;$a<1000;$a++) $h[]=$i;return $h;}
// タイム測定
function bench() {return microtime(true);}
// ベンチマーク表示
function cale($time) {
echo "<pre>";print_r($time);echo "</pre>";
foreach($time as $t) {echo "<p>".($t[1]-$t[0])."</p>";}
}
// --------- 比較コード ---------------- */
$time[0][0]=bench();
$test = array();
$h = array_slice(testAry(), 50);
foreach ($h as $v) $test[]=$v;
$time[0][1]=bench();
// ---------- 175のコード ------------- */
$time[1][0]=bench();
$test = array();
foreach (array_slice(testAry(), 50) as $v) $test[]=$v;
$time[1][1]=bench();
/* ---------- ここまで ---------------- */
cale($time);
0205nobodyさん
2009/04/10(金) 13:22:39ID:???テストした結果どちらもたいして変わらない
0206nobodyさん
2009/04/10(金) 13:28:45ID:???0209nobodyさん
2009/04/10(金) 15:08:50ID:???昨日から詰まってます。。。。助けてください。
.forwardのパーミッションは600。メールの転送ができることは確認済みです。
PHP 5.0.4 FedoraCore
.forwardの中身
"| /usr/bin/php -q /var/www/html/test2.php"
test2.phpは単体で動かせることは確認済みです。
メールを受け取った後、test2.phpが動いてる様子がありません。。。
0212nobodyさん
2009/04/10(金) 15:17:53ID:???.forwardの中身
"| /usr/bin/php /var/www/html/test2.php"
test2.phpの中身の一行目(パスは自分の環境にあわせてね)
#!/usr/bin/php -q
0215nobodyさん
2009/04/10(金) 15:20:35ID:???PHPだけの糞仕様を広めないでください
まともな言語なら差は出ません
0217nobodyさん
2009/04/10(金) 15:23:22ID:???0218nobodyさん
2009/04/10(金) 15:24:05ID:???バイトはスーパーwwwwwwwwwwwww
タッパに葉っぱwwwwwwwwwwwwwwww
詰め込む河童wwwwwwwwwwww
頭はテンパーwwwwwwwwwwww
パッパカパーwwwwwwwwwwwwwwwwww
0220nobodyさん
2009/04/10(金) 15:33:34ID:???JAVAやC#なんかからきたやつはforの中でlength書いてるだろうし、
PHPでも別にcountを中に書いてもいいよ。
速度ってもミリ秒の誤差程度だし別に気にする必要もない。
0221nobodyさん
2009/04/10(金) 15:35:33ID:???入れてませんでした。
だけれど試して見ましたがダメでした。
>>212
変化ありませんでした。
パーミは705でやってます。
あまりにも解けなさすぎて吐き気が。。。
0222207
2009/04/10(金) 15:39:26ID:???forの中で関数使うな
for () {
//ここで使うな
}
っていってるのかと思っただけなんだが
0223nobodyさん
2009/04/10(金) 15:41:31ID:???まず、パイプ前なのか、パイプ後なのか切り分けろや
とりあえず、シェルスクリプトならうごくかどうかやってみ。
touch hoge とかでいいから
0225nobodyさん
2009/04/10(金) 16:08:39ID:???メールうけとったあとのシェルの動かし方がわからん。
shhogeというファイルを作ってtouch hogeを書き込む。
sh shhogeで空ファイルが書き込めることを確認してから
パーミを705に変更。
.forwardの中身を"| /var/www/html/shhoge" や
"| /var/www/html/sh shhoge"にしてみて、メールを受け取ってみたが
だめだった。
>>224
それは最初にやったお。
test2.phpに#!/usr/bin/phpつけてやってもだめだったお。
0226nobodyさん
2009/04/10(金) 16:10:46ID:???0227nobodyさん
2009/04/10(金) 16:29:11ID:???0229nobodyさん
2009/04/10(金) 17:20:06ID:???0230nobodyさん
2009/04/10(金) 17:24:58ID:???0231nobodyさん
2009/04/10(金) 17:25:20ID:???ごめんなさいお。疲れたのでたったいまVMwareを落としたとこだお。
夜風を浴びて飯食べたら、また来るお。
メールサーバのローカル配送ログは観方が判らなかったので
スルーしてたお。あとで確認するお。
0232nobodyさん
2009/04/10(金) 17:33:36ID:???0233nobodyさん
2009/04/10(金) 18:00:19ID:???レンタルサーバでcronを使って、2chを定期的に監視するプログラムを作ろうと思うのですが、
公開されているプログラムなどありませんでしょうか?
スレ違いならすみません。
0234nobodyさん
2009/04/10(金) 18:01:57ID:???0239nobodyさん
2009/04/10(金) 20:35:19ID:???0241nobodyさん
2009/04/10(金) 20:46:12ID:???0242nobodyさん
2009/04/10(金) 20:48:58ID:???まず、自分がどうやってるか書いたら?
良い方法は?って言われてもな。
一意な名前を取得する方法なんて腐るほどあるっしょ。
インデックスを保持するファイルを一つ作っといて、そこで一意を確保してからrenameするとか
すきなアルゴリズムにしたらいいよ
0243nobodyさん
2009/04/10(金) 20:56:57ID:???http://akid.s17.xrea.com/
http://www9.atpages.jp/~perfume2ch/wiki/
0244nobodyさん
2009/04/10(金) 21:06:39ID:???0245nobodyさん
2009/04/10(金) 21:48:10ID:???コンパイラや実行環境が最適化してくれる場合もあるし、大した差がつかないのは事実だけどな。
初心者がやってたら理解していない可能性を考えて訂正するのは正しい姿勢だと思うが。
>194-196, >204
ベンチマーク取るにしては処理が短すぎる。
そのくらいだとPC内のほかのタスクとかがノイズになって意味のある数字が出ない。
1秒とか10秒とかの単位で時間がかかるような規模の試験をした方がいい。
0246nobodyさん
2009/04/10(金) 21:58:27ID:???0247209
2009/04/10(金) 22:19:41ID:???.forward
"| /usr/bin/php /var/www/html/test2.php"
test2.php
#!/usr/bin/php -q
<?php
print "START";
system("touch hoge");
echo "end";
?>
maillog
postfix/smtpd[3703]: connect from atg-asm1.t-com.ne.jp[218.219.54.53]
postfix/smtpd[3703]: 2895E5DC486: client=atg-asm1.t-com.ne.jp[218.219.54.53]
postfix/cleanup[3707]: 2895E5DC486: message-id=<004a01c9b9de$15f7cf10$0701a8c0@XXXXXX551ed45>
postfix/qmgr[3669]: 2895E5DC486: from=<AAAAAAAAA@tba.t-com.ne.jp>, size=1594, nrcpt=1 (queue active)
postfix/smtpd[3703]: disconnect from atg-asm1.t-com.ne.jp[218.219.54.53]
postfix/local[3708]: 2895E5DC486: to=<YYYYYYYYYY@ZZZZZZZZ.homeip.net>, relay=local, delay=0, status=sent (delivered to command: /usr/bin/php /var/www/html/test2.php)
postfix/qmgr[3669]: 2895E5DC486: removed
0248nobodyさん
2009/04/11(土) 01:44:12ID:???count()っていうのはループ中に値が変わる可能性があるわけで
バグによってループする回数が変わってしまう危険性
っていうほうが避ける理由じゃないかな。。
0249nobodyさん
2009/04/11(土) 01:48:10ID:???arr.lengthとfor(x in arr )を同じつもりで使うのは危ないよ。
例えばDOM使うと、forだと思ったとおりにならないときがあると思う。
0250nobodyさん
2009/04/11(土) 02:13:44ID:jaJ+Ur9l送った、あるいは送る予定のheaderを取得するにはどうしたらいいですか?
0251nobodyさん
2009/04/11(土) 02:28:50ID:???0252nobodyさん
2009/04/11(土) 02:36:37ID:???ありがとうございました。
0253nobodyさん
2009/04/11(土) 02:55:15ID:???デフォルトで送る予定のContent-Type: text/http等は
決めうちで取得させるしかないですか?
0254nobodyさん
2009/04/11(土) 05:24:48ID:HAu5s/9P$_FILEのtypeは信用できないということを聞いたので、
別の方法で取得するようにしたのですが、
その他のname、size、errorなどは信用してもよいのでしょうか?
nameなどはエスケープ処理などする必要がありますか?
よろしくお願いします。
0256nobodyさん
2009/04/11(土) 06:24:24ID:???>1秒とか10秒とかの単位で時間がかかるような規模の試験をした方がいい。
そこまで両者に差が出るとは思えないし
そんな結果が出るまでやるとなるとメモリが足りなくなるでは?
できるならぜひベンチ結果をみてみたいが
というかそんな規模のものPHPじゃ作らないだろうし杞憂な気もするけど・・・
>>248
>count()っていうのはループ中に値が変わる可能性があるわけで
>バグによってループする回数が変わってしまう危険性
だいたいこういう処理は配列を1つずつ取り出す場合に使うのであって
対象の配列数が変わるような処理をやるほうがおかしいのでは?
具体的にどのようなことをするのか検討もつかないけど・・・
バグによってループ回数が変わるっていうのも意味不明
>>183もナイワと批判を書くのではなくて
外におけばPHPではパフォーマンスがあがるという注釈をつければここまで伸びなかった
■ このスレッドは過去ログ倉庫に格納されています