09/04/11 07:17:24
>>257
失敗しても気にするなよ。諦めたらそこで試合終了だよ
260:nobodyさん
09/04/11 07:18:25
>>258
でたらめなSQL書いてqueryしても例外でないんですよ。
で、戻り値はfalse
ちなみに環境は PHP5.2.9 とWindows版にバンドル版されてるSQLite です。
261:nobodyさん
09/04/11 07:22:23 YDJbdlsq
基本的なことだと思うのですが、
<?php
$a .= "あ"
. "い"
. "う"
;
$b .= "あ";
$b .= "い";
$b .= "う";
echo $a."<br><br>".$b;
?>
の結果は同じになると思いますが、
少し複雑に変数やループ処理を入れたときに、
なぜか$aの方の"あ"の部分が消えてしまいます。
しかし、$b方式だと成功します。
>少し複雑に変数やループ処理を入れたときに、
を詳しく説明したいのですが、コードが長く、
まとめるにも上手く伝える術が見つかりませんでした。
簡易に説明すると、
データを参照して、何ページかを判断して、
リンク付きのページ番号をずらっと表示させるようなプログラム部分になるのですが、
どうして$aではできないのに$bだとできるのか疑問に思いました。
何か心当たりありましたらよろしくお願いします。
262:nobodyさん
09/04/11 07:25:34 YDJbdlsq
追記
ループ処理した$aを、
クラスの変数、private $a;
に格納していって、function get_a(){return $this->a;}
の、get_a()メソッドで参照したときに問題が起こりました。
phpは5.2.6です
263:nobodyさん
09/04/11 08:31:57
コードが長けりゃどこかにうpすればいいのに
264:247
09/04/11 09:40:31
>>255
error_logはsystemの戻り値の判定のところに書けばいいの?
265:nobodyさん
09/04/11 10:03:46
とりあえず、どこまで出来てるのか確認するのが基本
だから、<?phpの後でいいんじゃね?
266:247
09/04/11 10:37:14
エラーログを吐き出すようにしてみました。
単体で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
09/04/11 10:48:01
forwardでコマンドは実行されているみたいですがtest2.phpは動いていない。
・.forwardの中が間違っている。→/usr/bin/phpは存在する。
→/var/www/html/test2.phpでtest2.phpを
動かせる。
・パーミッションが間違っている。→.forwardを600 test2.phpを705or755
あと考えられる事象はなんでしょうか。
268:nobodyさん
09/04/11 11:22:57
>>267
ディストリは何使ってるんだ?
それがわかれば同じ環境作ってやってみるけど
269:nobodyさん
09/04/11 11:32:38
>>267
.forward
"| /usr/bin/php -q /var/www/html/test2.php"
にしてみ
270:nobodyさん
09/04/11 11:35:55
.forward
"| /var/www/html/test2.php"
うちは、これで動くけど?
271:nobodyさん
09/04/11 11:59:26
まず
"| touch /tmp/hoge"
ってやってみて処理してるユーザ名を把握してはどうだろう
272:247
09/04/11 12:15:02
>>267
ディストリというのは環境という意味でいいのかな?
PHP 5.0.4kfedoracore4です。
>>269
>>270
試してみました。
>>271
suxxxxxxxのユーザーの空ファイルとなりました。
……test2.phpはroot。……まさか。。。
273:261
09/04/11 12:15:24 YDJbdlsq
ありがとうございます
自己解決しました。
実際は、
$a .= "あ"
. $i+1
. "う"
;
という風に、”い”の部分は計算式をいろいろと入れていたのですが、
その計算式を()でくくって
$a .= "あ"
. ($i+1)
. "う"
;
のようにしたら、できました。
274:247
09/04/11 12:23:05
>>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さん
09/04/11 12:35:09 jPW674z3
グローバル変数はまったく使わないほうがいいのでしょうか?
276:nobodyさん
09/04/11 12:43:26
うん
スーパーグローバルは使うけど
277:nobodyさん
09/04/11 13:12:41
スーパーグローバルは便利だが、テストしにくくなる。
モジュールごと、クラスごとにテストを書かないといけないような、ややっこしいコードを作る時は避けた方がいい。
グローバル変数は使うべきではない、とされている。
これは、グローバル変数はどこでどう値が変えられるか分からないのが最大の理由。
ある時点でグローバルに何が入っているかは、プログラムの最初から最後まで全部読まないと分からない。
不具合発生時に原因を特定しづらいし、機能追加時などにどの時点でどの変数がどうなってるか分かりづらくなる。
いっぽう、一時変数は、その関数の中で生成され、その関数が終わったら消えるので、その関数の中だけ見れば値が分かる。
グローバルに依存しない関数は、同じ引数を渡せば同じ結果が常に返って来る。
プログラムのどこで呼ばれても(引数が同じならば)同じ結果が返る事が保証されているので、バグの原因を探しやすい。
278:247
09/04/11 14:11:26
ディレクトリィのパーミッションを777に変えてたら
test2.phpまで届いてログが出るようになりました。
ですが、system("touch hoge")が実行されず
まだ空ファイルが作られない状態です。
279:nobodyさん
09/04/11 14:16:55
file_put_contents("/tmp/hoge.txt", realpath("."));を書いてみて、
カレントディレクトリを把握してはどうだろう。そしたらパーミッションを確認してと・・