[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 18:38 / Filesize : 76 KB / Number-of Response : 280
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:nobodyさん mailto:sage [2009/04/06(月) 04:14:58 ID:???]
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

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

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ

166 名前:nobodyさん mailto:sage [2009/04/10(金) 02:53:25 ID:???]
$thisを見るとか?

167 名前:nobodyさん mailto:sage [2009/04/10(金) 05:12:52 ID:???]
>>165
そもそもstaticなメソッドをthisからメンバ関数として呼ぶべきじゃないよ

168 名前:nobodyさん mailto:sage [2009/04/10(金) 09:47:55 ID:???]
static全否定?

169 名前:168 mailto:sage [2009/04/10(金) 09:48:47 ID:???]
ああ、ごめん勘違い

170 名前:nobodyさん [2009/04/10(金) 10:13:06 ID:0gMhmbJC]
どなたか>>149もお願い致します

171 名前:nobodyさん [2009/04/10(金) 10:32:51 ID:BYyPBH+i]
foreach を 配列の途中から始めることはできますでしょうか?
このような場合はforを使うのが普通なのでしょうか?

よろしくお願いします。

172 名前:nobodyさん mailto:sage [2009/04/10(金) 10:38:07 ID:???]
>>171
>foreach を 配列の途中から始めることはできますでしょうか?
できないけど結果として同じものを得るのは可能

>このような場合はforを使うのが普通なのでしょうか?
はい

173 名前:171 [2009/04/10(金) 10:53:33 ID:BYyPBH+i]
>>172
レスありがとうございます。

やはりforを使うのが普通なのですね。
いちおう、後学のためにforeachを使って途中から開始する方法も教えていただけないでしょうか?

174 名前:nobodyさん mailto:sage [2009/04/10(金) 10:58:47 ID:???]
forで初期indexがわかってる時しか使えないでしょ。
seekしてiterator使った方がいいよ。



175 名前:nobodyさん mailto:sage [2009/04/10(金) 11:03:41 ID:???]
>>173
途中から開始するわけではなくて無駄な分はしっかりまわす感じ
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;
 }
}

176 名前:nobodyさん mailto:sage [2009/04/10(金) 11:11:03 ID:???]
foreach自体に途中から始める機能はないけど

foreach (array_slice($array, N) as $value) こうやるのが普通?かな

177 名前:nobodyさん mailto:sage [2009/04/10(金) 11:11:14 ID:???]
>>175
マジレスするとforeachの中でifで判定する手法は古いとだけ記述しておこう

178 名前:173 [2009/04/10(金) 11:20:09 ID:BYyPBH+i]
>>174
すみません。
知識不足で「seekしてiterator」というのがわかりません;

>>175
なるほど・・・
こうしてみると、たしかに後者は無駄が多いですね。

>>176
array_sliceで途中から取り出すというのは思いつきませんでした!
これは使えそうですね!

179 名前:nobodyさん mailto:sage [2009/04/10(金) 11:32:44 ID:???]
>>176
プチマジレスするとforeachの中でarray_sliceすると回すたびに関数が実行されるから
一度別の配列に入れるのがいい

180 名前:nobodyさん mailto:sage [2009/04/10(金) 11:41:47 ID:???]
マジレスするとforでやりなYO

181 名前:nobodyさん mailto:sage [2009/04/10(金) 11:44:44 ID:???]
>>179
以下のようにすると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";

182 名前:nobodyさん mailto:sage [2009/04/10(金) 11:50:13 ID:???]
>>178
$ai = new ArrayIterator(array(1, 3, 5, 7, 9));
$ai->seek(2);
while ($ai->valid()) {
echo $ai->current();
$ai->next();
}

183 名前:nobodyさん mailto:sage [2009/04/10(金) 11:53:22 ID:???]
>>175
forの中にcount入れるとかナイワ

184 名前:nobodyさん [2009/04/10(金) 11:55:38 ID:FoG5RXFZ]
プロキシでHPにアクセスする人います
80番ポートでアクセスしたとか8080番ポートでアクセスしたとか何番ポートを使ってアクセスしたかを調べたいのですが
どのような関数を使うのでしょうか?



185 名前:nobodyさん mailto:sage [2009/04/10(金) 12:00:51 ID:???]
>>183
よく嫁foreachだろ
forはiで現在位置がわかるが
foreachはわからないからな

186 名前:nobodyさん [2009/04/10(金) 12:00:54 ID:/dNSLV40]
ttp://www.phppro.jp/phpmanual/php/filters.string.html
文字列フィルタについて質問です
上記ページと公式サイトには例が4つまで載ってるのですが
これはあくまでも一例で他にもあるのでしょうか?
もしよろしければ掲載されてないコードをご教示お願い致します

187 名前:nobodyさん mailto:sage [2009/04/10(金) 12:01:22 ID:???]
>>179
こうやってもhogeは一度だけ表示されるけどもしかしてarray_sliceって特別な実行のされ方?

function slice2()
{
echo "hoge<br>\n";
return array(1,3,5);
}
foreach (slice2() as $value) echo $value,"<br>\n";

188 名前:186 [2009/04/10(金) 12:01:35 ID:/dNSLV40]
すいませんID出し忘れました
以後、気を付けます

189 名前:nobodyさん mailto:sage [2009/04/10(金) 12:02:41 ID:???]
>>185
よく読んだらこう書いてありますね

for ($i = 2; $i < count($array); $i++) {
 echo $array[$i];
}

190 名前:nobodyさん mailto:sage [2009/04/10(金) 12:24:25 ID:???]
>>175じゃないが俺もcount使ってるわ
配列の長さ取得するのってPHPだとcountじゃないの?
JavaやJavaScriptでいうlengthと一緒だよね?

191 名前:nobodyさん mailto:sage [2009/04/10(金) 12:54:09 ID:???]
自分の場合、PHPでfor文使うのは、かなり少ないな。
なんかオフセット的なパラメータが出てくるのはうざったい。

自分の作ったコードでgrepしたら foreachの 1/10 以下だった。
while は半分ぐらい。

>>190
javascriptは微妙だけどね。
いきなり配列に x[100] = 'hogehoge'; とかすると、length は 101 になるくせに、
for(in) だと登録した1つしか出てこないし。そのわりに join は 101個結合するし。

192 名前:nobodyさん mailto:sage [2009/04/10(金) 12:56:45 ID:???]
折れも、for文なら count()を使う。

でも、大抵 foreach 文で処理しちゃうけどね...

193 名前:178 [2009/04/10(金) 12:58:57 ID:BYyPBH+i]
>>179
そうだったんですか!
ということは、for($i = 1; $i < count($array); $i++)
のように書いた場合も、毎回count()が実行されるのでしょうか?
一度 $count = count($array)
のようにしたほうがいいですか?

>>182
ArrayIteratorというクラスがあったんですね。
ややコードが長くなりますが、配列が直感的に操作できますね!

配列のループだけでもいろいろなやり方があって、勉強になります!
質問してみてよかったです!

194 名前:nobodyさん mailto:sage [2009/04/10(金) 13:04:28 ID:???]
// テスト用変数
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);




195 名前:nobodyさん mailto:sage [2009/04/10(金) 13:05:15 ID:???]
>>192
マニュアル読め。

jp.php.net/manual/ja/control-structures.for.php
>この書き方には問題があります。 このコードは実行速度が遅くなることでしょう。 配列のサイズを毎回計算しているからです。 ...

>>179 の意味がイマイチ取りきれんのだけど、foreach がループ回数分だけ式を評価するってのは初耳。
ちょっとありえんと思う。

196 名前:nobodyさん mailto:sage [2009/04/10(金) 13:06:32 ID:???]
>>194の続き

ベンチマーク結果

0.00026893615722656(countをforから外したコード)
0.016515970230103(>>175>>185が進めるのコード)



197 名前:nobodyさん mailto:sage [2009/04/10(金) 13:07:52 ID:???]
>>195 間違い >>192 じゃなくて >>193
ごめんね。

198 名前:nobodyさん mailto:sage [2009/04/10(金) 13:08:30 ID:???]
>>195
うほっ。最適化されるもんだとばかりorz。


199 名前:nobodyさん mailto:sage [2009/04/10(金) 13:08:59 ID:???]
>>181
そういうこと
foreach (array_slice(foo(), 2) as $value) echo $value,"<br>\n";

fooは一度しか呼び出されないが、配列の数だけarray_sliceが動いてる

200 名前:nobodyさん mailto:sage [2009/04/10(金) 13:11:00 ID:???]
>>194-195
参考になりました
ありっす

201 名前:nobodyさん mailto:sage [2009/04/10(金) 13:14:39 ID:???]
>>199
マニュアルを読む限り、foreach が式をループ回数だけ評価するようには読めないんだけど。
っていうか、foreachが式が関数の場合に、関数は評価するが、その引数は評価しないとか、ありえんと思うが。

jp.php.net/manual/ja/control-structures.foreach.php

202 名前:nobodyさん mailto:sage [2009/04/10(金) 13:16:50 ID:???]
さてベンチマークの俺の出番ですね

203 名前:nobodyさん mailto:sage [2009/04/10(金) 13:19:31 ID:???]
>>202
お願いします。勇者!

204 名前:nobodyさん mailto:sage [2009/04/10(金) 13:21:58 ID:???]
// テスト用変数
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);



205 名前:nobodyさん mailto:sage [2009/04/10(金) 13:22:39 ID:???]
続き

テストした結果どちらもたいして変わらない

206 名前:nobodyさん mailto:sage [2009/04/10(金) 13:28:45 ID:???]
結論からいえばforの中で関数は使うなってこと

207 名前:nobodyさん mailto:sage [2009/04/10(金) 14:57:47 ID:???]
>>206
頭大丈夫か?

208 名前:nobodyさん mailto:sage [2009/04/10(金) 15:08:18 ID:???]
>>207>>175

ベンチマークみて行ってんならおまえ致傷だな

209 名前:nobodyさん mailto:age [2009/04/10(金) 15:08:50 ID:???]
メールを受け取ったらphpファイルを起動させようとしているのですが上手くいきません。
昨日から詰まってます。。。。助けてください。
.forwardのパーミッションは600。メールの転送ができることは確認済みです。
PHP 5.0.4 FedoraCore

.forwardの中身
"| /usr/bin/php -q /var/www/html/test2.php"

test2.phpは単体で動かせることは確認済みです。
メールを受け取った後、test2.phpが動いてる様子がありません。。。


210 名前:nobodyさん mailto:sage [2009/04/10(金) 15:10:47 ID:???]
>>207ってID出さないスレで正規表現でたたかれてた人物じゃない?
これ以上触れるとこのスレ荒らされるぞw

211 名前:nobodyさん mailto:sage [2009/04/10(金) 15:16:10 ID:???]
>>209
test2.phpに#!/usr/bin/phpみたいなパスは書いてあるよな?

212 名前:nobodyさん mailto:sage [2009/04/10(金) 15:17:53 ID:???]
これでダメならまたおいで

.forwardの中身
"| /usr/bin/php /var/www/html/test2.php"

test2.phpの中身の一行目(パスは自分の環境にあわせてね)
#!/usr/bin/php -q

213 名前:nobodyさん mailto:sage [2009/04/10(金) 15:18:37 ID:???]
>>212
あ、test2.phpのパーミッションは705か755にしろよ

214 名前:nobodyさん mailto:sage [2009/04/10(金) 15:19:09 ID:???]
>>210
お前が荒らしてるんだよ頭大丈夫か?



215 名前:nobodyさん mailto:sage [2009/04/10(金) 15:20:35 ID:???]
わざわざ配列のカウントを変数に入れたりしないから
PHPだけの糞仕様を広めないでください
まともな言語なら差は出ません

216 名前:nobodyさん mailto:sage [2009/04/10(金) 15:20:55 ID:???]
>>210
貴様のせいでこのスレに正規表現クンが来たじゃないかww
責任とって>>175を始末しろよw

217 名前:nobodyさん mailto:sage [2009/04/10(金) 15:23:22 ID:???]
215必死w

218 名前:nobodyさん mailto:sage [2009/04/10(金) 15:24:05 ID:???]
俺はーラッパーwwwwwwwwww
バイトはスーパーwwwwwwwwwwwww
タッパに葉っぱwwwwwwwwwwwwwwww
詰め込む河童wwwwwwwwwwww
頭はテンパーwwwwwwwwwwww
パッパカパーwwwwwwwwwwwwwwwwww

219 名前:nobodyさん mailto:sage [2009/04/10(金) 15:28:04 ID:???]
>>215
>まともな言語なら差は出ません

( ゚Д゚)ポカーン

220 名前:nobodyさん mailto:sage [2009/04/10(金) 15:33:34 ID:???]
まともな言語というかコンパイラ言語なら差はでないだろうな。
JAVAやC#なんかからきたやつはforの中でlength書いてるだろうし、
PHPでも別にcountを中に書いてもいいよ。
速度ってもミリ秒の誤差程度だし別に気にする必要もない。

221 名前:nobodyさん mailto:sage [2009/04/10(金) 15:35:33 ID:???]
>>211
入れてませんでした。
だけれど試して見ましたがダメでした。

>>212
変化ありませんでした。
パーミは705でやってます。

あまりにも解けなさすぎて吐き気が。。。

222 名前:207 mailto:sage [2009/04/10(金) 15:39:26 ID:???]
いや・・・俺が言いたかったのは
forの中で関数使うな
for () {
//ここで使うな
}
っていってるのかと思っただけなんだが

223 名前:nobodyさん mailto:sage [2009/04/10(金) 15:41:31 ID:???]
>>221
まず、パイプ前なのか、パイプ後なのか切り分けろや
とりあえず、シェルスクリプトならうごくかどうかやってみ。
touch hoge とかでいいから

224 名前:nobodyさん mailto:sage [2009/04/10(金) 15:47:08 ID:???]
>>221
"| /var/www/html/test2.php"
これでよしっと



225 名前:nobodyさん mailto:sage [2009/04/10(金) 16:08:39 ID:???]
>>223
メールうけとったあとのシェルの動かし方がわからん。
shhogeというファイルを作ってtouch hogeを書き込む。
sh shhogeで空ファイルが書き込めることを確認してから
パーミを705に変更。
.forwardの中身を"| /var/www/html/shhoge" や
"| /var/www/html/sh shhoge"にしてみて、メールを受け取ってみたが
だめだった。


>>224
それは最初にやったお。
test2.phpに#!/usr/bin/phpつけてやってもだめだったお。

226 名前:nobodyさん mailto:sage [2009/04/10(金) 16:10:46 ID:???]
一回再起動してもちつけ

227 名前:nobodyさん mailto:sage [2009/04/10(金) 16:29:11 ID:???]
.forwardには来てるの?

228 名前:nobodyさん mailto:sage [2009/04/10(金) 17:16:00 ID:???]
>>226
何か変えるごとにメール鯖を再起動してるお。

>>227
メールの転送はできてるお。


229 名前:nobodyさん mailto:sage [2009/04/10(金) 17:20:06 ID:???]
PHPとは関係ない気がするが、メールサーバのローカル配送ログは確認した?

230 名前:nobodyさん mailto:sage [2009/04/10(金) 17:24:58 ID:???]
/usr/bin/php が無かったりしないの?

231 名前:nobodyさん mailto:sage [2009/04/10(金) 17:25:20 ID:???]
>>229
ごめんなさいお。疲れたのでたったいまVMwareを落としたとこだお。
夜風を浴びて飯食べたら、また来るお。
メールサーバのローカル配送ログは観方が判らなかったので
スルーしてたお。あとで確認するお。

232 名前:nobodyさん mailto:sage [2009/04/10(金) 17:33:36 ID:???]
とりあえずその言葉使いはやめような

233 名前:nobodyさん mailto:sage [2009/04/10(金) 18:00:19 ID:???]
質問させてください。
レンタルサーバでcronを使って、2chを定期的に監視するプログラムを作ろうと思うのですが、
公開されているプログラムなどありませんでしょうか?
スレ違いならすみません。

234 名前:nobodyさん mailto:sage [2009/04/10(金) 18:01:57 ID:???]
キミが監視しなくてもすでに他の人が監視してるから大丈夫



235 名前:nobodyさん mailto:sage [2009/04/10(金) 18:23:48 ID:???]
>>233
監視って具体的になにをするのね

236 名前:233 mailto:sage [2009/04/10(金) 18:44:10 ID:???]
>>235
とりあえず自分のブログに盛り上がっているスレのリンクと、
先頭数レスの表示をしようと思ってます。

237 名前:nobodyさん mailto:sage [2009/04/10(金) 19:31:13 ID:???]
>>236
専ブラ作るために公開されてる仕様があるのでそれ嫁ができます

238 名前:162 [2009/04/10(金) 20:32:35 ID:z5toBuCm]
>>162 はやっぱりないですかね。

>>164
多分、質問の意味を理解されてません。

239 名前:nobodyさん mailto:sage [2009/04/10(金) 20:35:19 ID:???]
flockしる

240 名前:nobodyさん mailto:sage [2009/04/10(金) 20:38:07 ID:???]
>>239
flockとどういう関係が?


241 名前:nobodyさん mailto:sage [2009/04/10(金) 20:46:12 ID:???]
一時的に利用するためのファイルの名前にこだわる理由がわからない

242 名前:nobodyさん mailto:sage [2009/04/10(金) 20:48:58 ID:???]
>>238
まず、自分がどうやってるか書いたら?
良い方法は?って言われてもな。

一意な名前を取得する方法なんて腐るほどあるっしょ。
インデックスを保持するファイルを一つ作っといて、そこで一意を確保してからrenameするとか
すきなアルゴリズムにしたらいいよ

243 名前:nobodyさん mailto:sage [2009/04/10(金) 20:56:57 ID:???]
>>233
akid.s17.xrea.com/
www9.atpages.jp/~perfume2ch/wiki/


244 名前:nobodyさん mailto:sage [2009/04/10(金) 21:06:39 ID:???]
連番でいいよもう



245 名前:nobodyさん mailto:sage [2009/04/10(金) 21:48:10 ID:???]
forの中で関数呼び出しはPHPに限らず大抵の言語でもパフォーマンスが落ちる。
コンパイラや実行環境が最適化してくれる場合もあるし、大した差がつかないのは事実だけどな。
初心者がやってたら理解していない可能性を考えて訂正するのは正しい姿勢だと思うが。

>194-196, >204
ベンチマーク取るにしては処理が短すぎる。
そのくらいだとPC内のほかのタスクとかがノイズになって意味のある数字が出ない。
1秒とか10秒とかの単位で時間がかかるような規模の試験をした方がいい。

246 名前:nobodyさん mailto:sage [2009/04/10(金) 21:58:27 ID:???]
批判する前に自分もコードを出したらいいじゃん

247 名前:209 mailto:sage [2009/04/10(金) 22:19:41 ID:???]
ログを見ても原因らしい原因が判りません。。。。

.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


248 名前:nobodyさん mailto:sage [2009/04/11(土) 01:44:12 ID:???]
パフォーマンス云々よりも
count()っていうのはループ中に値が変わる可能性があるわけで
バグによってループする回数が変わってしまう危険性

っていうほうが避ける理由じゃないかな。。


249 名前:nobodyさん mailto:sage [2009/04/11(土) 01:48:10 ID:???]
あと、上のほうにあったJavaScriptの話で

arr.lengthとfor(x in arr )を同じつもりで使うのは危ないよ。

例えばDOM使うと、forだと思ったとおりにならないときがあると思う。


250 名前:nobodyさん [2009/04/11(土) 02:13:44 ID:jaJ+Ur9l]
httpヘッダのcontent-typeを取得したいのですが
送った、あるいは送る予定のheaderを取得するにはどうしたらいいですか?

251 名前:nobodyさん mailto:sage [2009/04/11(土) 02:28:50 ID:???]
jp2.php.net/manual/ja/function.headers-list.php

252 名前:nobodyさん mailto:sage [2009/04/11(土) 02:36:37 ID:???]
こんな関数あったんですね
ありがとうございました。

253 名前:nobodyさん mailto:sage [2009/04/11(土) 02:55:15 ID:???]
headers_listって自分で設定したヘッダしか取得できないんですね
デフォルトで送る予定のContent-Type: text/http等は
決めうちで取得させるしかないですか?

254 名前:nobodyさん [2009/04/11(土) 05:24:48 ID:HAu5s/9P]
ファイルアップロードに関する質問なのですが、
$_FILEのtypeは信用できないということを聞いたので、
別の方法で取得するようにしたのですが、
その他のname、size、errorなどは信用してもよいのでしょうか?
nameなどはエスケープ処理などする必要がありますか?

よろしくお願いします。



255 名前:nobodyさん mailto:sage [2009/04/11(土) 05:49:24 ID:???]
>>247
それで、hogeは出来てないんだよね?
次はerror_log書いて、PHPのログをチェックかな


256 名前:nobodyさん mailto:sage [2009/04/11(土) 06:24:24 ID:???]
>>245
>1秒とか10秒とかの単位で時間がかかるような規模の試験をした方がいい。
そこまで両者に差が出るとは思えないし
そんな結果が出るまでやるとなるとメモリが足りなくなるでは?
できるならぜひベンチ結果をみてみたいが
というかそんな規模のものPHPじゃ作らないだろうし杞憂な気もするけど・・・

>>248
>count()っていうのはループ中に値が変わる可能性があるわけで
>バグによってループする回数が変わってしまう危険性
だいたいこういう処理は配列を1つずつ取り出す場合に使うのであって
対象の配列数が変わるような処理をやるほうがおかしいのでは?
具体的にどのようなことをするのか検討もつかないけど・・・
バグによってループ回数が変わるっていうのも意味不明

>>183もナイワと批判を書くのではなくて
外におけばPHPではパフォーマンスがあがるという注釈をつければここまで伸びなかった

257 名前:nobodyさん [2009/04/11(土) 06:53:18 ID:/nX8neeQ]
PDOのマニュアルには失敗した時の動作が、書かれてないんですが、
このあたりはドライバ依存ってことなんでしょうか?

jp.php.net/manual/ja/pdo.query.php
jp.php.net/manual/ja/pdo.exec.php

例外で処理するのか戻り値で処理するのか、イマイチわかりません。
とりあえず、今使ってるSQLiteでは戻り値で判断できるみたいですが、ちょっと不安だなぁと言うことで。


258 名前:nobodyさん mailto:sage [2009/04/11(土) 07:09:52 ID:???]
>>257
PDO用の例外があるでしょ
PDOExceptionだったかな

259 名前:nobodyさん mailto:sage [2009/04/11(土) 07:17:24 ID:???]
>>257
失敗しても気にするなよ。諦めたらそこで試合終了だよ

260 名前:nobodyさん mailto:sage [2009/04/11(土) 07:18:25 ID:???]
>>258
でたらめなSQL書いてqueryしても例外でないんですよ。
で、戻り値はfalse

ちなみに環境は PHP5.2.9 とWindows版にバンドル版されてるSQLite です。

261 名前:nobodyさん [2009/04/11(土) 07:22:23 ID:YDJbdlsq]
基本的なことだと思うのですが、
<?php
$a .= "あ"
. "い"
. "う"
;

$b .= "あ";
$b .= "い";
$b .= "う";

echo $a."<br><br>".$b;

?>
の結果は同じになると思いますが、
少し複雑に変数やループ処理を入れたときに、
なぜか$aの方の"あ"の部分が消えてしまいます。
しかし、$b方式だと成功します。
>少し複雑に変数やループ処理を入れたときに、
を詳しく説明したいのですが、コードが長く、
まとめるにも上手く伝える術が見つかりませんでした。
簡易に説明すると、
データを参照して、何ページかを判断して、
リンク付きのページ番号をずらっと表示させるようなプログラム部分になるのですが、
どうして$aではできないのに$bだとできるのか疑問に思いました。
何か心当たりありましたらよろしくお願いします。

262 名前:nobodyさん [2009/04/11(土) 07:25:34 ID:YDJbdlsq]
追記

ループ処理した$aを、
クラスの変数、private $a;
に格納していって、function get_a(){return $this->a;}
の、get_a()メソッドで参照したときに問題が起こりました。

phpは5.2.6です

263 名前:nobodyさん mailto:sage [2009/04/11(土) 08:31:57 ID:???]
コードが長けりゃどこかにうpすればいいのに

264 名前:247 mailto:sage [2009/04/11(土) 09:40:31 ID:???]
>>255
error_logはsystemの戻り値の判定のところに書けばいいの?



265 名前:nobodyさん mailto:sage [2009/04/11(土) 10:03:46 ID:???]
とりあえず、どこまで出来てるのか確認するのが基本
だから、<?phpの後でいいんじゃね?

266 名前:247 mailto:sage [2009/04/11(土) 10:37:14 ID:???]
エラーログを吐き出すようにしてみました。
単体でtest2.phpを動かすとログを出しますが、
メールを介して動かしてもログが吐き出されませんでした。

maillog
(delivered to command: /usr/bin/php /var/www/html/test2.php)

.forward
"| /usr/bin/php /var/www/html/test2.php"

test2.php
#!/usr/bin/php -q
<?php
error_log("テストエラー",0);
system("touch hoge");
?>

267 名前:247 mailto:sage [2009/04/11(土) 10:48:01 ID:???]
forwardでコマンドは実行されているみたいですがtest2.phpは動いていない。
・.forwardの中が間違っている。→/usr/bin/phpは存在する。 
               →/var/www/html/test2.phpでtest2.phpを
                動かせる。
・パーミッションが間違っている。→.forwardを600 test2.phpを705or755

あと考えられる事象はなんでしょうか。

268 名前:nobodyさん mailto:sage [2009/04/11(土) 11:22:57 ID:???]
>>267
ディストリは何使ってるんだ?
それがわかれば同じ環境作ってやってみるけど

269 名前:nobodyさん mailto:sage [2009/04/11(土) 11:32:38 ID:???]
>>267
.forward
"| /usr/bin/php -q /var/www/html/test2.php"
にしてみ

270 名前:nobodyさん mailto:sage [2009/04/11(土) 11:35:55 ID:???]
.forward
"| /var/www/html/test2.php"

うちは、これで動くけど?

271 名前:nobodyさん mailto:sage [2009/04/11(土) 11:59:26 ID:???]
まず
"| touch /tmp/hoge"

ってやってみて処理してるユーザ名を把握してはどうだろう

272 名前:247 mailto:sage [2009/04/11(土) 12:15:02 ID:???]
>>267
ディストリというのは環境という意味でいいのかな?
PHP 5.0.4kfedoracore4です。

>>269
>>270
試してみました。

>>271
suxxxxxxxのユーザーの空ファイルとなりました。
……test2.phpはroot。……まさか。。。


273 名前:261 [2009/04/11(土) 12:15:24 ID:YDJbdlsq]
ありがとうございます
自己解決しました。
実際は、
$a .= "あ"
. $i+1
. "う"
;
という風に、”い”の部分は計算式をいろいろと入れていたのですが、
その計算式を()でくくって
$a .= "あ"
. ($i+1)
. "う"
;
のようにしたら、できました。

274 名前:247 mailto:sage [2009/04/11(土) 12:23:05 ID:???]
>>271

作成されたファイルhoge
-rw------- 1 suXXXXXXX suXXXXXX 0 4月 11 08:36 hoge
.forward
-rw------- 1 suXXXXXXX suXXXXXXX 20 4月 11 08:35 .forward
test2.php
-rwx---r-x 1 root root 112 4月 11 08:02 test2.php

ごく。



275 名前:nobodyさん [2009/04/11(土) 12:35:09 ID:jPW674z3]
グローバル変数はまったく使わないほうがいいのでしょうか?

276 名前:nobodyさん mailto:sage [2009/04/11(土) 12:43:26 ID:???]
うん
スーパーグローバルは使うけど

277 名前:nobodyさん mailto:sage [2009/04/11(土) 13:12:41 ID:???]
スーパーグローバルは便利だが、テストしにくくなる。
モジュールごと、クラスごとにテストを書かないといけないような、ややっこしいコードを作る時は避けた方がいい。

グローバル変数は使うべきではない、とされている。
これは、グローバル変数はどこでどう値が変えられるか分からないのが最大の理由。
ある時点でグローバルに何が入っているかは、プログラムの最初から最後まで全部読まないと分からない。
不具合発生時に原因を特定しづらいし、機能追加時などにどの時点でどの変数がどうなってるか分かりづらくなる。

いっぽう、一時変数は、その関数の中で生成され、その関数が終わったら消えるので、その関数の中だけ見れば値が分かる。
グローバルに依存しない関数は、同じ引数を渡せば同じ結果が常に返って来る。
プログラムのどこで呼ばれても(引数が同じならば)同じ結果が返る事が保証されているので、バグの原因を探しやすい。

278 名前:247 mailto:sage [2009/04/11(土) 14:11:26 ID:???]
ディレクトリィのパーミッションを777に変えてたら
test2.phpまで届いてログが出るようになりました。
ですが、system("touch hoge")が実行されず
まだ空ファイルが作られない状態です。


279 名前:nobodyさん mailto:sage [2009/04/11(土) 14:16:55 ID:???]
file_put_contents("/tmp/hoge.txt", realpath("."));を書いてみて、
カレントディレクトリを把握してはどうだろう。そしたらパーミッションを確認してと・・






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<76KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef