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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/09/18(土) 19:20:37ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

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

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0542nobodyさん2010/09/30(木) 20:16:32ID:???
そんなスクリプト捨ててしまえ
0543nobodyさん2010/09/30(木) 20:30:29ID:???
定型分として書いてるから気がつかんな
捨ててしまえ
0544nobodyさん2010/09/30(木) 20:31:59ID:???
ショートタグ使ってるコードにまともなものはないから捨てて正解
0545nobodyさん2010/09/30(木) 21:16:21ID:xlyY++2I
うう デフォでショートタグだわw
あぁ おいらのコードは見られると穴だらけだなw
0546nobodyさん2010/10/01(金) 00:51:46ID:???
>>541
そのスクリプト一番最後に全部?>はいってるだろ
0547nobodyさん2010/10/01(金) 00:55:26ID:???
なんつうオチだ
0548nobodyさん2010/10/01(金) 01:22:52ID:???
俺は ?> 書かないな
0549nobodyさん2010/10/01(金) 01:23:42ID:???
ダメなコード(自分主観)は…
・ショートタグ
・文字コードがShift-JIS
・extract
・タグを閉じたり開いたり忙しい
・echo "{$var}";
・ファイルの先頭・要所にコメントがない、
 あってもコード見たら分かる事しか書いてない(仕様を書かないと意味がない)
・1行がやたらと長い
・$_GETとか$_POST配列扱う時にisset使わず分岐したりしてる(警告出るちゅーねん!)

…書き出したらきりがないのでこのあたりにしておく
0550nobodyさん2010/10/01(金) 01:37:35ID:???
>>549
$_GETや$_POSTのチェックって
!emptyよりissetがいいの?
0551nobodyさん2010/10/01(金) 01:44:11ID:???
emptyでもis_nullでもなんでもよか
0552nobodyさん2010/10/01(金) 01:48:55ID:???
>>550
基本的に、関数(もしくは言語構造)の本来の意味を考えて使い分けてる、
”あるかどうか”を調べたいのならisset
”無いかどうか”を調べたいのならempty

$_GETとかで使うのはほぼ前者
0553nobodyさん2010/10/01(金) 01:53:57ID:???
あと、issetを自分がよく使うのは
isset($_GET['name'], $_GET['email'], $_GET['body']);のように複数渡せるからというのもある
0554nobodyさん2010/10/01(金) 01:54:18ID:JW8iU96H
・$_GETとか$_POST配列扱う時にisset使わず分岐したりしてる(警告出るちゅーねん!)

これって
$hoge = $_GET['hoge'];
がだめっていってるんだよね?

$hoge = null;
if (isset($_GET['hoge'])) {
$hoge = $_GET['hoge'];
}

にしろってことだよね?

もしいっぱいあった場合ってすべての$_GET $_POSTに対してこの処理をするの?
10個ぐらいあるとだいぶ間抜けに見えそうなんだけど
なんかいい記述方法あるかな?
0555nobodyさん2010/10/01(金) 01:56:53ID:???
>>550
判断基準が全然違うので目的にあったものを使う
どちらも未定儀の変数に対する挙動は null の場合と同じ

is_null()
> var が null の場合に TRUE、 それ以外の場合に FALSE を返します。

empty()
> varが空でないか、0でない値であれば FALSE を返します。
>
> 次のような値は空であると考えられます。:
>
> * "" (空文字列)
> * 0 (0 は整数)
> * "0" (0は文字列)
> * NULL
> * FALSE
> * array() (空の配列)
> * var $var;(変数が宣言されているが、クラスの中で値が設定されていない)
0556nobodyさん2010/10/01(金) 02:00:23ID:???
>>554
なんとissetは引数の数が可変、一気に処理できる
0557nobodyさん2010/10/01(金) 02:06:44ID:JW8iU96H
そらー知らなかったわー
あとでよくマヌアルみてみる
ありがとう
0558nobodyさん2010/10/01(金) 07:01:53ID:???
array_key_existsばっか使ってるわ俺
0559nobodyさん2010/10/01(金) 10:06:47ID:Jbi45SFJ
function foo($bar){
$bar = preg_replace("/あ/","い",$bar);
}
$a = "あいうえお";
foo($a);
echo $a;

と書いたんですが、

あいうえお

と出力されてしまいます。

いいうえおに変換されるようにするにはどこが間違ってますでしょうか
0560nobodyさん2010/10/01(金) 10:13:14ID:???
>>559
それだと$aの中身が変わってないから
echo $a しても「あいうえお」のまま。
0561nobodyさん2010/10/01(金) 10:15:34ID:???
>>559
function foo(&bar) {
0562nobodyさん2010/10/01(金) 10:19:36ID:???
- function foo($bar){
+ function foo(&$bar){
0563nobodyさん2010/10/01(金) 10:21:33ID:???
>>560-562
ありがとうございました
&がいるんですね
しっかり見落とさないようにします
0564nobodyさん2010/10/01(金) 10:22:30ID:???
$が抜けてた恥ずかしい…
0565nobodyさん2010/10/01(金) 10:28:19ID:???
文字コードがUTF-8のときは、
preg_replace("/あ/u","い",$bar);
ってしないとうまく動かないかも。
0566nobodyさん2010/10/01(金) 11:01:18ID:???
>>559
だからそんな単調な置換にpreg_replaceを使うなと何度(ry
0567nobodyさん2010/10/01(金) 11:33:39ID:???
あいうえお を いいうえおにすることに対してそんなに突っ込まなくていいよ
0568nobodyさん2010/10/01(金) 11:35:37ID:???
初心者にヘタくそなコード教えるなよ・・・正規表現使うところか?
0569nobodyさん2010/10/01(金) 11:35:40ID:???
例題にマジになってる男の人って・・・
0570nobodyさん2010/10/01(金) 11:43:12ID:???
function foo($bar){
return 'いいうえお';
}
$a = 'あいうえお';
echo foo($a);
0571nobodyさん2010/10/01(金) 14:30:05ID:???
$_GETや$_POSTをチェックする意味って何?
0572nobodyさん2010/10/01(金) 14:39:42ID:???
postはそうそうないけどgetはパラメータいじれるだろ
0573nobodyさん2010/10/01(金) 14:40:08ID:???
>>572
お前に聞いてない
0574nobodyさん2010/10/01(金) 15:01:22ID:???
>そうそうない
その程度の認識だからPHPがゴミ扱いされるんだよ
0575nobodyさん2010/10/01(金) 15:07:51ID:???
>>572
そうじゃなくて、>>549-554の言うようにisset等でチェックする意味あるの?
$var=$_GET["var"] 等とした後に$varの内容を目的に応じてチェックするんじゃ
だめなの?
0576nobodyさん2010/10/01(金) 15:26:09ID:???
そこらへんまとめてクラスとymlでする俺には関係ない話だった
0577nobodyさん2010/10/01(金) 15:36:01ID:???
>>575
チェックしないと警告でるじゃん
てか、あらゆる入力(入力なしの場合も含む)を想定して
プログラムしないと、後々バグのすくつになる
0578nobodyさん2010/10/01(金) 16:02:36ID:???
自分の場合、
error_reporting(E_ALL | E_STRICT);
を設定して、あらゆる操作で一切の警告が出ないことが前提条件
0579nobodyさん2010/10/01(金) 16:12:42ID:???
>>577
$_GET["var"]が存在しないとき、
$var=$_GET["var"]
とすると警告出る?記憶にないんだが。
0580nobodyさん2010/10/01(金) 16:13:50ID:???
一つ前のレスにあるだろ
設定次第
0581nobodyさん2010/10/01(金) 16:16:28ID:???
$_GET['var']が存在しない場合もあるでしょ
その場合代入できるわけないでしょ
0582nobodyさん2010/10/01(金) 16:17:15ID:???
>>578
バージョン5.3使ってますって書いておけ
0583nobodyさん2010/10/01(金) 16:30:59ID:???
E_STRICTはphp5からだし
E_ALLはphp4にもある

それに$var=$_GET["var"]これでエラーが出る設定は
E_NOTICEを出力する場合だからE_ALLだけで十分
5.3とか関係ないな
0584nobodyさん2010/10/01(金) 16:39:55ID:???
$var=$_GET["var"]でエラーとなる件
これって、つまり$_GET["var"]が存在しないのに評価しようとしてWarningが出るってこと?
配列だからエラーになるの?
$var=$a($aは未定義)の場合もエラーになるの?
0585nobodyさん2010/10/01(金) 16:48:29ID:???
Notice: Undefined variable
0586nobodyさん2010/10/01(金) 17:56:49ID:???
>>584
先頭に
error_reporting(E_ALL);
つけてやればわかるだろ
まぁ予想通りの結果>>585になるが
0587nobodyさん2010/10/01(金) 18:08:33ID:???
>>586
PHP5.2じゃでねえよ
ちゃんとPHP5.3の環境で出ますって書け
0588nobodyさん2010/10/01(金) 18:10:31ID:???
一人痛い人が居るようですね
0589nobodyさん2010/10/01(金) 18:28:01ID:???
バージョン関係ないし
0590nobodyさん2010/10/01(金) 19:04:14ID:/wsXjKAq
一番厳格にするには error_reportingにE_ALL | E_STRICT | E_NOTICEと設定する事ですか?
0591nobodyさん2010/10/01(金) 19:17:48ID:???
>>590
E_ALL: サポートされる全てのエラーと警告。 E_STRICT レベルのエラーは除く。
0592nobodyさん2010/10/01(金) 19:40:37ID:???
>>566
単調な場合に最適なのを教えていただけないでしょうか
0593nobodyさん2010/10/01(金) 19:44:38ID:???
str_replace
0594nobodyさん2010/10/01(金) 19:48:17ID:???
ちょっと前にスレでも同じ質問でpreg_replaceの話題が出てたのにね
釣りとしか思えない
0595nobodyさん2010/10/01(金) 20:06:07ID:???
>>594
>>141のこと?
0596nobodyさん2010/10/01(金) 20:07:38ID:???
>>593
ありがとうございます
正規置換とで使い分けたらいいのかな?
0597nobodyさん2010/10/01(金) 20:10:43ID:???
>>592
過去ログを10回見ろ
0598nobodyさん2010/10/01(金) 20:17:46ID:???
過去ログを10回見るより>>593を一回見た方がよくね?
>>593は単純なprintもwhileで10回まわして表示するタイプ
0599nobodyさん2010/10/01(金) 20:21:01ID:???
>>593じゃなくて>>597だろ
0600nobodyさん2010/10/01(金) 21:19:30ID:???
単純な置換ならstr_replace、strposがいいって出てますよ
>>599
スレに張り付きすぎ少しゆとりを持て
0601nobodyさん2010/10/01(金) 21:21:30ID:???
例文が単純な置き換えだから単純な置き換えの質問にちまいない
ってどんだけ単純な頭なんだよ
0602nobodyさん2010/10/01(金) 21:55:01ID:???
顧客が説明した要件 : 関数に渡した変数をpreg_replace()っても呼び出し元は変わんない!不思議!
プロジェクトリーダーの理解 : Unicode修飾子が怪しくね?
アナリストのデザイン : 正規表現使うなカス
プログラマのコード : function foo($bar) { return 'いいうえお'; }
得られたサポート : 過去ログ10回読め

顧客が本当に必要だったもの : 参照渡し
0603nobodyさん2010/10/01(金) 22:01:40ID:???
全然上手いこと言ってないような気が
0604nobodyさん2010/10/01(金) 22:05:52ID:???
>>602
すぐに正しい回答が出てたのを故意に伏せてる辺りがざんねん
0605nobodyさん2010/10/01(金) 23:17:39ID:???
あんまおもしろくなかったが
スレ相応しいくだらないくだりを必死で考えたことは褒めてやろう
0606nobodyさん2010/10/02(土) 00:20:26ID:2C+2SXQ6
オープンソースとして公開されているPHPのシステムがあるのですが、
もうしばらくメンテナンスがされておりません。

それを使ってみたのですが、いくつか動かない個所を見つけました。
apacheのエラーログにエラーが残ってないので、スクリプトのエラー
はなくバグで動いていないかと思うのですが、こういったものの一般的な
デバッグはどのように行うのでしょうか?

PHPはほぼ初めてで、でバッギングツールがあるのかどうなのかもわかっていません。
0607nobodyさん2010/10/02(土) 00:34:52ID:???
PHPのエラーログってなかったっけ
0608nobodyさん2010/10/02(土) 00:49:00ID:???
>>606
デバッグはxdebugを使う
開発環境と連携するには
http://www.vkazoo.com/?p=260
0609nobodyさん2010/10/02(土) 03:18:46ID:???
>>606
設定次第でどこにでもエラーログを作れるので
必ずしもapacheのログにある訳ではない
あとそのオープンソースのって何?有名所のなら
ちゃんとコミュニティとかはあると思うけど・・・

>>608
別にxdebugじゃなくても良いけどな
デバッガなんて開発環境に合わせて選べば良いんじゃない?
0610nobodyさん2010/10/02(土) 06:50:18ID:???
>>606
ソース読めるならおかしいと思う辺りにデバッグ用のprint文とかを
入れてみるのが早い。
あぁ、PHP初めてでしたか
0611nobodyさん2010/10/02(土) 11:36:38ID:???
デバッグはprintよりvar_dumpのほうが
0612nobodyさん2010/10/02(土) 11:45:41ID:???
print_rでやってる人も多くね?
0613nobodyさん2010/10/02(土) 11:57:15ID:???
俺はprint_r派だけど状況によってvar_dump使うこともある
printはprint_rの書き間違いだと思うけど
0614nobodyさん2010/10/02(土) 12:10:07ID:???
オレオレprint_r超便利
0615nobodyさん2010/10/02(土) 12:13:19ID:???
値がfalseなのかnullなのか空白なのかを調べるときはvar_dumpだな
たいていはprint_rでやってるけど
ログに書き込むときに便利だし
0616nobodyさん2010/10/02(土) 12:42:53ID:???
function pr($var) {
echo '<pre>';
var_dump($var);
echo '</pre>';
}
0617nobodyさん2010/10/02(土) 13:36:21ID:???
手動デバッグは効率が悪い
0618nobodyさん2010/10/02(土) 14:34:56ID:???
デバッガー使いたいが
鯖で動かしていると無理だな
0619nobodyさん2010/10/02(土) 14:59:48ID:???
デバッガーの使い方がわからない
0620nobodyさん2010/10/02(土) 16:05:29ID:???
デバッガーにバグがあったら使えない
0621nobodyさん2010/10/02(土) 17:36:19ID:???
print_rはないな
var_dumpかvar_exportで2番目の引数をtrueにする
0622nobodyさん2010/10/02(土) 17:40:42ID:???
PHP使ったことないからしらんけど、
某大手家電メーカの情報部はみんなprint_r使ってるぞ。
(みんなっちゅうか教育でそう教えられるのかも知れんが

何かあるごとにprint_rみせて print_rみせて って聞こえるし
「すみません。ココが動かないんですけど」って新人の問いに print_r使えばいい
って言ってる。

ちなみに今そこの会社の人間に
「PHPのバグではまった」ってメール送ったら
「print_rで見ればいい 」 っていわれた。
0623nobodyさん2010/10/02(土) 18:00:31ID:???
>PHP使ったことないからしらんけど、

>「PHPのバグではまった」ってメール送ったら

矛盾してないか?
0624nobodyさん2010/10/02(土) 18:12:17ID:???
他のプラットフォーム上(SNSとか)で動かすもの作ってるとvar_dumpが吸収されちゃって見れないことあるから
エラー文字列をDBに保存して見てるわ
0625nobodyさん2010/10/02(土) 18:13:43ID:???
>>623
どういう返事が来るか試すためにメール送ってみただけよ
0626nobodyさん2010/10/02(土) 18:35:03ID:???
>>625策士wwwww
0627nobodyさん2010/10/02(土) 18:35:41ID:l4wTIWl0
URLをクリックでページ遷移&POSTでデータ渡しって可能ですか?
空白のある文字列をそのまま渡したいんですが、GETだと空白の所で途切れてしまうんです。
どうやればいいんでしょうか?
0628nobodyさん2010/10/02(土) 18:42:58ID:???
>>627
urlencode
06296272010/10/02(土) 18:55:08ID:l4wTIWl0
おお。ありがとうございます。
0630nobodyさん2010/10/02(土) 19:11:10ID:???
PHPで数百ステップ程度のコードなら何度か書いたことがあるのですが、(非オブジェクト指向)
次は人が書いたコードのデバッグにチャレンジしてみようと思っています。

PHPってCの用に頭から読んでいくのが一般的なのでしょうか?
0631nobodyさん2010/10/02(土) 19:41:48ID:???
頭からっていうか動く順じゃねえの
0632nobodyさん2010/10/02(土) 20:07:54ID:???
そんな読み方してたら最近のCMSのコード読む場合
何カ月かかるんだよ
0633nobodyさん2010/10/02(土) 20:15:19ID:???
632はどうやって読んでんの
0634nobodyさん2010/10/02(土) 20:17:02ID:???
PHP ステップ実行でググるといいよ
0635nobodyさん2010/10/02(土) 20:25:46ID:???
ってかPHPに頭なんてねえだろ
Cはmainから動くことが決まってるけど、PHPなんてどこから呼び出されるかわからん
0636nobodyさん2010/10/02(土) 20:39:32ID:???
phpも頭からだろ
0637nobodyさん2010/10/02(土) 20:53:14ID:???
あたまってどこかくわしく
0638nobodyさん2010/10/02(土) 21:48:54ID:???
リクエストされたスクリプト(例:index.html)の先頭
0639nobodyさん2010/10/02(土) 22:03:17ID:???
HTMLwwwwwwwwwww
0640nobodyさん2010/10/02(土) 22:10:28ID:???
>>638
どこからよばれるかわからないでしょ。
0641nobodyさん2010/10/02(土) 22:21:36ID:???
拡張子で判断するのはただの馬鹿

エントリポイントとなってるスクリプトの<?phpが先頭だろ
そこからおってけばどーとでもなる
■ このスレッドは過去ログ倉庫に格納されています