【PHP】下らねぇ質問はここに書き込みやがれ 55
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/29(土) 18:35:56ID:YlkpEUW6PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 54
http://pc11.2ch.net/test/read.cgi/php/1189309377/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0482nobodyさん
2007/10/06(土) 04:37:51ID:???それのやってる事は
if( ! is_array($hoge)){ // 配列ジャナイ場合(これobjectとかがきたらどーすんだis_stringとかにしたらいいのに)
$ tmp = array(); // 配列初期化
for($ i = 0; $i<strlen($hoge); $i++){ // $hogeを文字列と仮定して文字の長さ文ループ
$tmp[$i] = substr($hoge, $i, 1); // 1バイトずつ文字を切り出して配列に格納
}
$hoge = $tmp; // $hogeに格納
}
多分この後に何か$hogeを使った処理を使うためにしてるだけじゃないかな
0483nobodyさん
2007/10/06(土) 04:40:11ID:???そんなことは最初から403も分かってるよ。
スカラーの変数に配列の変数を代入なんて何故できるの?って話。
CかJavaみたいなガチガチ言語に頭が毒されてるんでしょ。
0484403
2007/10/06(土) 04:50:04ID:???>CかJavaみたいなガチガチ言語に頭が毒されてるんでしょ。
ズバリそうなんです。
「もう、こんなもんだ」と無理矢理納得するしか無いのかな。
こんな事許されてたら、メンテナンス悪くなるし、可読性低くなるし、
危険じゃないのかしら?
とりあえず、有り難うございました。
0485474
2007/10/06(土) 04:51:11ID:qCDvmkUYまさかこんなに早くお答えいただけると思ってませんでした。
お礼が遅くなって申し訳ありません。
自分の書き方でも特に冗長ではないというご意見をいただき安心しました。
でも、475さんや477さんのアドバイスはとても勉強になりました。
状況に合わせて使ってみたいと思います。
みなさん、本当にありがとうございました。
0486nobodyさん
2007/10/06(土) 04:53:04ID:???なんだそんな事か(´・ω・`)
俺は自分の中で型を意識した組み方してるけど
そこらへんは組み方次第でどーとでもなるんじゃないかなぁ・・・
意識するとメンドイ事多いけど・・・
0487474
2007/10/06(土) 04:56:47ID:qCDvmkUY476さんのご指摘の preg_replace を使う方法は
後で自分でも調べて確認してみます。
アドバイスありがとうございました。
0488nobodyさん
2007/10/06(土) 05:11:58ID:1HWd7HDN御免間違えた
preg_match
0489nobodyさん
2007/10/06(土) 05:27:00ID:???ここまで適当なのは他にあまり無いよ。
0490nobodyさん
2007/10/06(土) 07:01:28ID:???Perlはわざわざmyをつけないと歴史駆るスコープにならないような言語だし
0491nobodyさん
2007/10/06(土) 09:46:45ID:hKjy3c4n0492nobodyさん
2007/10/06(土) 09:53:27ID:???0493nobodyさん
2007/10/06(土) 10:03:02ID:???内部変換しているかどうかの違いだけ
0494nobodyさん
2007/10/06(土) 10:06:12ID:???のは可読性があがって俺は好きだ
0495nobodyさん
2007/10/06(土) 11:01:19ID:???0496nobodyさん
2007/10/06(土) 11:02:25ID:???$thisもだけど->がめんどくさい。「.」は文字列結合で使用済みだから仕方ないけど。
最近Ruby始めたら変数の$すら面倒になってきた。始めた頃は変数わかりやすいと思ってたのに。
チラシの裏スマソ
0497nobodyさん
2007/10/06(土) 11:20:23ID:???0498nobodyさん
2007/10/06(土) 11:27:26ID:???0499nobodyさん
2007/10/06(土) 11:37:53ID:???給料は安いくせにやたら条件が高いから困る
未経験歓迎なのは使い捨てのJavaだな
0500nobodyさん
2007/10/06(土) 11:46:26ID:???いやいや、そういう感覚は大事だと思うよ。
ただ、型に縛られる必要は無いと思う。
function hoge($val)
本来$valはarrayである。と決めきってしまうと
要素数が1のときもわざわざarrayにしてから関数よばなきゃいけない。
ところが、内部でarrayじゃないときは、arrayにしてやる
処理を入れておけば、関数の外部仕様的には
複数指定したいならarrayにしてちょ。
単数ならわざわざarrayにしなくてもいいよ。
という緩さが実現できる。
0501500
2007/10/06(土) 11:48:38ID:???$year = 2001;
とかしてるのに変数を流用して
$year = 年とは無関係の何か;
とかされるとストレスかかるな。
0503nobodyさん
2007/10/06(土) 12:20:35ID:???500じゃないが
俺は外部で型変換するなー
内部で変換させたら関数内がどんどん見難くなるし。
変換する事が多いなら変換用の関数作ってその関数から呼ぶようにしてたりはするけど。
0504500
2007/10/06(土) 12:23:12ID:???内部であえてチェックするかってこと?
エラーになる要因は早めにつぶすべきだから、
チェックするのは良い習慣だと思う
ただ、すべてでチェックはオーバーヘッドになるし、書くのめんどくさいから
適度に手抜きしてるかな
パラメータに限らないが前提条件を満たしているか
チェックすることはよくある
0506nobodyさん
2007/10/06(土) 12:41:37ID:???0508nobodyさん
2007/10/06(土) 12:44:39ID:???0509nobodyさん
2007/10/06(土) 12:45:40ID:???0510nobodyさん
2007/10/06(土) 12:46:49ID:???0512nobodyさん
2007/10/06(土) 12:51:21ID:???0513nobodyさん
2007/10/06(土) 13:23:50ID:JwDld5m1以下頭からの処理の流れ。
・POSTのみで渡される値はPOSTのみ、GETならGETのみで取得
・GETで来ないはずの値が来たらはじく。
・変数の型と値のとりうる範囲や文字列の長さ、形式に添っているか
型判定関数や正規表現でチェックし、不正なものをはじく。
ただしフォーム入力値などキーボードで入力するものを除く。
:
・値を使用する関数内で、型や値の範囲、文字列長さなどを上と同じように
チェック。フォーム入力値などは誤入力の可能性があるので
エラー表示して再入力を促して終了。
・HTML表示する場合はすべての変数をエスケープして表示。
・DBにアクセスする場合はPrepared Statementで値を渡す。
(今のところエミュレーションじゃないので普通に渡してる)
・ストアドで値の妥当性をチェックし、例えば存在しないはずのユーザーID
とかだったら不正入力の結果を返して終了。誤入力の可能性のある
値であれば別の結果を返して終了。問題なければ処理を実行。
(DB処理はすべてストアド使ってます。生SQL文はソースに書いてません)
・ストアドからの返り値から、はじくなりエラー表示するなり処理結果を
表示するなり行う。
はじくってのは強制的にセッション切ってます。
正当性判定の関数を作っておくくらいで、上のような地道なやり方しか
思いつかないんだけど、こういう便利なものがあるよとかこうしたほうがいいよ
とかこんなのも知らないの?とかあったら教えてくださいませ。
フレームワーク使ってないけど、こういうのが楽になるのかなあ。
0514nobodyさん
2007/10/06(土) 13:41:51ID:???そkらへんの処理めんどくさいからフレームワーク使ってる
簡単なもんだったら期待値以外はエラー
クエリー実行は全てぷりぺあ通して使ってる
0515nobodyさん
2007/10/06(土) 13:49:34ID:???かならずしも回答がくるとは限らない
回答者のレベル・回答者の気分で影響するからだ。
質問者はどうやったら回答率をあげられるか考えてから言葉を選んだほうが良い
0516nobodyさん
2007/10/06(土) 14:18:15ID:???それを形にしようとする努力をするタイプかどうかが重要なんじゃないかな?
すごいといわれるプログラマや技術屋は掃いて捨てるほどいるけど、頭の柔軟なやつは少ないからね
起業するなら特にコミュニケーション能力なんかにも長けている必要がある
物事をシステマチックに考えて合理的な道を歩むのは得意だけど、逆を返せば不必要な回り道をしたくないばかりに
それに重点を置かないから結果的に評価がされなかったりと、そのあたり不器用な人多いね
0517nobodyさん
2007/10/06(土) 14:38:54ID:QcrZFc+A四苦八苦しながらやっている者です。
PHPをやっていて、どうしても解決できなかったので教えて下さい。
BASIC言語でいう、GOTO文ってPHPだとどうやって書けば宜しいのでしょうか?
あと、PHPだと、文法エラーの際に行番号がでるのはいいのですが、
PHPコードの先頭に行番号を書こうとすると、それが原因で文法エラーがでてしまします。
これは環境が悪いせいなのでしょうか?今は行番号を書かずに、先頭から数えています。
すみません、二点質問お手数ですが宜しくお願いします。
0521nobodyさん
2007/10/06(土) 14:45:23ID:???って書けばok
0522nobodyさん
2007/10/06(土) 14:55:18ID:QcrZFc+A>>520さん
>>521さん
早速のお返事ありがとうございます。
行番号は、コメント文として書けば宜しいんですね。ありがとうございます。
行番号をコードに書いていないのに、コンパイラが勝手に行番号を認識しているので、面食らってしまいました。
隠れている行番号を見せてくれるエディタ(ソフト)って、何があるのでしょうか?
私が今使っているのは、Windowsで標準ソフトであるメモ帳です。
あと、GOTO文についての回答どうもありがとうございました。
PHPって、GOTO文ないんですか。それはかなり辛いですね。
ネットで検索していても無かったんで、もしかしてと思っていたのですが。
今相当青い顔になっていますが、頑張ってやってみます・・・
どうもありがとうございました。
0523nobodyさん
2007/10/06(土) 15:01:49ID:???何度も同じ処理をしたいなら関数作れば良いし
ループを抜けたいとかならbreakと書けば良い
はっきり言ってgotoなんか無くても書けるよ
エディタは
emeditorとか秀丸とか一般的なエディタなら普通にできるし
PHPエディタ_スタンドアロン版とか使えば良いんじゃないかな
0524nobodyさん
2007/10/06(土) 15:05:46ID:???なんて質問投げられたら発狂するかも。(ちょっとオーバーだけど)
0525nobodyさん
2007/10/06(土) 15:25:18ID:???ネタなのかって疑ってしまいそうになるけど、BASICの考え方は
捨てたほうがいい。goto文なんていまどきの言語じゃ仮に実装
されててもまず使わない。
BASICでもgoto使うとスパゲティプログラムになっちゃいやすい
とかで、構造化プログラミングとか推奨されてたはず。
labelとかでcontinueからの飛び先を指定するのとかはあったり
するけれど。
行番号もやっぱりない。
それじゃ分かりにくいので、たいていは行番号を表示してくれる
エディタを使ってコード書く。コードそのものに行番号書く必要はない。
っていうか君はまず本なり買って基本的なこと学ぶべきだと思うよ。
プログラミングの感覚そのものは役に立つと思うけど、「BASICのように・・・」
とか考えちゃうと却って足踏みするだけだと思う。
0526nobodyさん
2007/10/06(土) 15:32:14ID:???0527nobodyさん
2007/10/06(土) 15:52:29ID:???まぁたまにGOTOほしいと思うことはあるよ
0528nobodyさん
2007/10/06(土) 16:02:51ID:???0529nobodyさん
2007/10/06(土) 16:08:00ID:???0530nobodyさん
2007/10/06(土) 16:08:11ID:kTZnfqET0532nobodyさん
2007/10/06(土) 16:28:59ID:???20 モニタの白が茶色に見えてくる
30 CLEAR SCREEN '掃除する
40 GOTO 10
0533nobodyさん
2007/10/06(土) 16:30:56ID:???そんなことも出来ない言語はお�hる
0534nobodyさん
2007/10/06(土) 16:34:22ID:???自動的に、ってのがプログラムを書かなくても勝手に、って意味なら無い。
素直に
テンポラリディレクトリにアップロード(自動)→ディレクトリ生成→そこにファイル移動
ってコードを書けばいいと思うよ。
0535nobodyさん
2007/10/06(土) 16:36:27ID:???出社
while(true){
仕事しながらタバコふかす
モニタの白が茶色に見えてくる
CLEAR SCREEN '掃除する
if(終業時間<=時計) break
}
退社
0536nobodyさん
2007/10/06(土) 16:37:16ID:???いまどきはBasicでもgotoはまず使わないし、先頭に行番号も書かないよ。
機能ごとにfunctionで処理を書いて、それを呼び出し→終わったら自動で戻る、を使う。
ファイルの行番号についてはプログラム向けのテキストエディタなら大抵表示してくれる。
0537nobodyさん
2007/10/06(土) 16:41:41ID:???どうでもいい事だが、
> if(終業時間<=時計) break
の所は、オレなら
if(終業時間==時計) break
と書く。じゃないとバグの発見が遅くなる。
0538nobodyさん
2007/10/06(土) 16:44:33ID:U5yeBGyi調べても置換用の関数しか出てきません・・・・
0539nobodyさん
2007/10/06(土) 16:52:23ID:???0540nobodyさん
2007/10/06(土) 16:53:07ID:???私はwhileにtrue突っ込むのいやなので、
while(終業時間>時計){としたいところなのだが。
>>535だと、出社の時点で終業時間 > 時計だったときに無駄に処理が動いてしまわないかい?
0541535
2007/10/06(土) 16:56:52ID:???そうですね>>while(true)
最初はifなしの無限ループにするつもりだったので
ネタなのでそこまで厳密に考えてません>>出社時間
0542nobodyさん
2007/10/06(土) 16:58:47ID:???どうせ雑談スレ作っても人少なすぎて閑古鳥状態だろうからこのままでいいよな?
0543nobodyさん
2007/10/06(土) 17:00:39ID:???123.123.123.123/20
に対して最後の20をとりたい場合
$str = 'fasdasda123.123.123.123/20fasrdqwrgsy4';
$ret = preg_match('!\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/(\d{2})!',$str,$match);
って感じにpreg_matchの第3引数に変数を入れてやると20が入ってくる
0544nobodyさん
2007/10/06(土) 17:00:56ID:???0545nobodyさん
2007/10/06(土) 17:02:55ID:???マッチしたか否かも、マッチした文字列取得も、書いてある気がするが
preg_match
http://jp2.php.net/manual/ja/function.preg-match.php
preg_match_all
http://jp2.php.net/manual/ja/function.preg-match-all.php
正規表現の結果とは何?
0546nobodyさん
2007/10/06(土) 17:11:03ID:???をループの先頭に入れればいいんじゃね?ちがう?
0547nobodyさん
2007/10/06(土) 17:14:02ID:???0548nobodyさん
2007/10/06(土) 17:28:42ID:???ちんちんちょん切っちゃうぞ、ってレスに、私女ですから、っていたら、男ですから、ってレスすればいいのに、医学的についているハズだとするのは興ざめに他ならない。
0550nobodyさん
2007/10/06(土) 17:43:29ID:???それだとタバコ休憩が長くなったりしてとっくに終業時刻を過ぎてると
帰れなくなったりしないか?w
終業時間の判定が分単位でなく時単位とかなら大丈夫かもしらんが。
>>540
ループに入る前の段階で if(時刻 > 終業時刻) 終業時刻 = 99; みたいに
例外状態に切り替えるのがいい気がする。
ま、どっちにしろループの終了判定はループ先頭ですべきだな。
0551nobodyさん
2007/10/06(土) 20:13:41ID:???php暦3年にもなろうというのにw
0552nobodyさん
2007/10/06(土) 20:21:30ID:???初めに学んだ言語が自分のデフォルトになっちゃって
他を軽蔑しがちになるよね
0553nobodyさん
2007/10/06(土) 20:54:23ID:???正直どれも好きだ
0554nobodyさん
2007/10/06(土) 20:59:50ID:???ループの外からいきなり飛び込んできたりとか
そんなスパゲッティなコードに悩まされた時期がありました
#あの過ぎ去った時間は無かったことにしたい黒歴史
0555513
2007/10/06(土) 21:20:05ID:JwDld5m1お返事ありがとう。
やっぱりフレームワーク使う以外楽するやり方ないのかな。
ちょっとやり方が泥臭い気がしてたんだけど必要な処理だし。。
0556nobodyさん
2007/10/06(土) 23:54:35ID:???0557nobodyさん
2007/10/07(日) 01:41:52ID:???0558nobodyさん
2007/10/07(日) 02:31:36ID:???/ / ヽ ::: \
| (●), 、(●)、 |
| ,,ノ(、_, )ヽ、,, |
| ,;‐=‐ヽ .:::::|
\ `ニニ´ .:::/ NO THANK YOU
/`ー‐--‐‐―´´\
.n:n nn
nf||| | | |^!n
f|.| | ∩ ∩|..| |.|
|: :: ! } {! ::: :|
ヽ ,イ ヽ :イ
0560nobodyさん
2007/10/07(日) 08:16:21ID:ucFl6OYUお礼のレスをしようとしたところ、数日アクセス拒否されておりまして、
レスが遅れて申し訳ありませんでした。
おかげ様で何とか先に進めそうです。どうもありがとうございました。
0561nobodyさん
2007/10/07(日) 08:44:53ID:???PHP 6でgoto文導入へ
http://itpro.nikkeibp.co.jp/article/COLUMN/20060327/233460/
0562nobodyさん
2007/10/07(日) 09:01:32ID:???goto文とかいらねーよ
0563nobodyさん
2007/10/07(日) 09:26:12ID:???ベーシック言語の特権みたいなものだしさ
0564nobodyさん
2007/10/07(日) 09:55:39ID:???0565nobodyさん
2007/10/07(日) 10:36:19ID:???0566nobodyさん
2007/10/07(日) 10:42:28ID:???処理速度の観点から言えば、(計算内容によるが)相当不利だよ。
0567nobodyさん
2007/10/07(日) 11:08:31ID:???Rubyは松本が面倒くさいからという理由で実装されてない
0568nobodyさん
2007/10/07(日) 11:09:07ID:???0569nobodyさん
2007/10/07(日) 11:20:09ID:???0570nobodyさん
2007/10/07(日) 11:49:26ID:???0572nobodyさん
2007/10/07(日) 12:49:22ID:???そういうツールとかある?
0575nobodyさん
2007/10/07(日) 16:49:57ID:9C3AWJOKクッキーについてですが、配列をクッキーに入れる場合全て上書きされるのでしょうか?
既存のクッキー配列に値を追加するということは可能なのでしょうか?
あと配列の名前設定は「cookie_name[]」←でいいのでしょうか?
たとえばこんな感じ
$hoge_arr = array("りんご", "みかん", "ぶどう");
$str_arr = array_push($hoge_arr, "バナナ", "マンゴー");
setcookie ("cookie_name[]", $str_arr );
if (isset($_COOKIE['cookie_name[]'])) {
foreach ($_COOKIE['cookie_name[]'] as $name => $value) {
echo "$name : $value <br />\n";
}
}
0576nobodyさん
2007/10/07(日) 16:51:29ID:9C3AWJOK$hoge_arr = $_COOKIE['cookie_name[]'];
$str_arr = array_push($hoge_arr, "バナナ", "マンゴー");
setcookie ("cookie_name[]", $str_arr );
if (isset($_COOKIE['cookie_name[]'])) {
foreach ($_COOKIE['cookie_name[]'] as $name => $value) {
echo "$name : $value <br />\n";
}
}
0577nobodyさん
2007/10/07(日) 16:56:05ID:???0578nobodyさん
2007/10/07(日) 17:03:20ID:???自ずと答えは出てくると思うけど・・・
もしそれでも解らないなら多次元配列から勉強すればいい
0579nobodyさん
2007/10/07(日) 17:15:02ID:???0580nobodyさん
2007/10/07(日) 17:15:15ID:4hyano09設置したところの自分のところのURLからのみ、メールを送信できるようにしたいと思うのですが、
他のURLからメール送信されないようにしたいのですが、
クッキーを使って対策したいと思います。
2ちゃんのようにハナモゲラみたいな語句を発行して、それで自分とこのURLから
メール送信されたか判断するのが妥当でしょうか?
0581nobodyさん
2007/10/07(日) 17:23:22ID:???どっちにしろリファラ偽装してくるような奴はクッキーも偽装してくるだろうし。
0582nobodyさん
2007/10/07(日) 18:34:41ID:???■ このスレッドは過去ログ倉庫に格納されています