【PHP】下らねぇ質問はここに書き込みやがれ 39
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/02/12(月) 20:33:59ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 38
http://pc10.2ch.net/test/read.cgi/php/1170520777/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0792nobodyさん
2007/02/20(火) 19:08:12ID:???本家本元のサイト見ても、曖昧な記述しか載ってないからねww
●●の場合はライセンス購入を「お勧めします」だもんw
「購入する必要があります」って断定じゃないからね。
0793nobodyさん
2007/02/20(火) 19:21:17ID:???再頒布若しくはMySQLを含んだソフトウェア販売の場合はライセンスを取得しなくてはならない
ってことでしょ?
何が難解なの?
0795nobodyさん
2007/02/20(火) 19:24:33ID:???アフィ厨が言ってるようなバックエンドでMySQLが動いてる
商用Webアプリは「再頒布」でも「ソフトウェア販売」でもないよな?
これはどっちだ?無償とも有償とも読み取れないぞ
0796nobodyさん
2007/02/20(火) 19:52:06ID:???0797nobodyさん
2007/02/20(火) 20:08:11ID:???>PHPとMYSQLの組み合わせがベストでしょうか?
という質問をなんでPHPのくだ質スレでするのか…?
0799nobodyさん
2007/02/20(火) 20:55:07ID:wdqQBZkRhttp://www.uploda.org/uporg700785.jpg
0803nobodyさん
2007/02/20(火) 21:31:34ID:???うーん、gotoはどんな処理をしているのかが非常にわかりにくくなる面があるけど、throwは処理を中断する方向にしかいかないし、そもそも「どこまで飛ぶか」を意識する必要もないんじゃないかな。
エラーとか入力チェックとか変数のnullチェックとかで、つじつまを合わせるのが難しいと感じたら、すぐthrowするくらいの勢いで問題ないと思うよ。
まあ確かに限度はあるだろうけど・・・。
0804nobodyさん
2007/02/20(火) 21:43:11ID:???気をつけなければならないのはcatchの方。
要らないやつまで細かくcatchすると、どこで捕捉されているのかわからなくなる。
0805nobodyさん
2007/02/20(火) 21:48:48ID:???throwってどうやって使えばいいの?
ifとかexitとかで代用できそうな気がしていまいちよく分からない
0806nobodyさん
2007/02/20(火) 21:57:06ID:???or die使いまくりなもんで。。
0807nobodyさん
2007/02/20(火) 22:03:52ID:???代用できなくはないけど、例外処理のほうがフレキシブル。
exitは一回呼び出したら全てが終了するけど、throwした例外はcatchさえすれば、回復して元の処理を継続することができる。
たくさんthrowしても、まとめて全部catchすることもできるし、catchブロックはエラー等の対処という明確な位置づけで考えることができるから、一度理解してしまえばすごくわかりやすいしね。
とにかく、エラー処理(=面倒くさい処理)を一箇所にまとめることで、コードがとても清潔で健康な状態に保たれる。
0809nobodyさん
2007/02/20(火) 22:35:07ID:???エラー処理
}
if (func2()==false) {
エラー処理
}
func3();
0810809
2007/02/20(火) 22:36:21ID:???func1();
func2();
func3();
}
catch {
エラー処理
}
0811809
2007/02/20(火) 22:37:57ID:???プログラム組んでると正常処理が異常処理に埋もれてしまう。>>809
try,catch使うと、これらを分離しやすい。>>810
のもtry,catchの利点かもな
0812nobodyさん
2007/02/20(火) 22:40:42ID:???0813809
2007/02/20(火) 22:41:18ID:???>>810 ではわからん。というのはデメリットだな。
>>789 がgotoより強力といってるのはこれのことかと。
0815nobodyさん
2007/02/20(火) 23:08:40ID:WMH2bERyif(preg_match('/^([0-9a-zA-Z]*)$/', $subject))
echo "マッチしました";
else
echo "マッチしませんでした";
$subject は、空文字列 ( "" ) なのでこの正規表現では
マッチしないはずなのですが、「マッチしました」が出力されます?
なんででしょうか……。
0816nobodyさん
2007/02/20(火) 23:13:46ID:???0817軟式PHP
2007/02/20(火) 23:14:04ID:???0818nobodyさん
2007/02/20(火) 23:15:13ID:???*は0以上マッチすることを表す。
つまり、空文字にもマッチする。
恐らく君が望む場合*を+(一回以上のマッチ)に変更しなければならない。
0820816
2007/02/20(火) 23:20:18ID:???あれ?ドットってなんだっけ?1文字だけだったよな
0821nobodyさん
2007/02/21(水) 01:28:57ID:???無 理 す ん な
0822nobodyさん
2007/02/21(水) 01:45:20ID:???0823nobodyさん
2007/02/21(水) 01:56:21ID:???0824nobodyさん
2007/02/21(水) 03:33:33ID:???$hoge = ほにゃらら
if($hoge != $_SERVER["SERVER_NAME"]) {
error();
}
とやりたいのですがほにゃららに当てはまる処理はどのように記述したら良いでしょうか?
0825nobodyさん
2007/02/21(水) 03:40:57ID:???まあ偽装できるけどね。
あと!=じゃなくてstrposとか部分一致で判断しないとダメ。
0826nobodyさん
2007/02/21(水) 03:46:22ID:???if( preg_match($AcceptHost, $SERVER['HTTP_REFERER']) ) {
error();
}
0827nobodyさん
2007/02/21(水) 03:47:19ID:???+ if( !preg_match($AcceptHost, $SERVER['HTTP_REFERER']) ) {
0828nobodyさん
2007/02/21(水) 03:49:38ID:???判定させる意味が分かんないけど>>825の言っている様に
どこから来たのかというのがリファラーで
それを吐かない場合にエラーを吐くのであれば''かnullか!で
0829nobodyさん
2007/02/21(水) 04:06:42ID:???ドメインがabc.comでリファラーがabcd.comだとエラーになりませんよね?
0830nobodyさん
2007/02/21(水) 04:09:42ID:???0831nobodyさん
2007/02/21(水) 05:20:09ID:???にすればいいじゃん
0832nobodyさん
2007/02/21(水) 05:22:40ID:???"えいちてぃーてぃーぴー://".$_SERVER["SERVER_NAME"]
にすればいいじゃん。
0833nobodyさん
2007/02/21(水) 05:42:48ID:???0834nobodyさん
2007/02/21(水) 05:59:03ID:???0835nobodyさん
2007/02/21(水) 06:00:08ID:SAIWRW73include $_POST....
?>
↑で色々なHP表示させたんですが、サイトによっては
文字化けしたり、しなかったりします。 何故なんでしょうか?
yahooはOKで、googleは化けたりします・・・うーん
0836nobodyさん
2007/02/21(水) 06:03:34ID:????
0838虚弱PHP
2007/02/21(水) 10:23:58ID:???まあ、そんなとこです。
>>810で言えば、func1()の中にも関数を呼び出しているところがあるだろうし、
その中で例外を投げるかもしれない。
PHPでは頻度は低いけど、事後処理が必要な場合もある。
んじゃ、事後処理をどこでやるか?
そこら辺を考え出すと例外を投げるにしても、
従来の>>809のようなtry〜catchやらないと、
ちゃんと事後処理をやっているのか、やっていないのか、
後から見た人にはわからないんだよね。
バグが潜伏しちゃうことも起きやすい。
それから、モジュール間の結合も強くなる。
↑こういうのは、設計である程度は避けれると思うけど…。
まあ、自分より遥かに偉いwプログラマーであるレイモンド・チェンとかも
例外は堅牢なプログラムには向かないって感じのこと言ってるから、
偉い人に右倣えなところもあるw
0839nobodyさん
2007/02/21(水) 11:50:12ID:???話が明後日の方向へ行ってるが。
$url = parse_url($_SERVER['HTTP_REFERER']);
if ($url['host'] != $_SERVER['SERVER_NAME']) {
error();
}
あとは好きにアレンジすればいい。
0840nobodyさん
2007/02/21(水) 12:08:20ID:dxH/dP0k$ary = explode('/', $_SERVER['SCRIPT_NAME']);
echo $ary[-3];
のように変数に代入せず、
echo (explode('/', $_SERVER['SCRIPT_NAME']))[-3]; //これはエラーになるけど
このような感じで一行でできないでしょうか?
0841840
2007/02/21(水) 12:14:17ID:???そこはみなかったことにしてください
0842840
2007/02/21(水) 12:15:31ID:???5行目は
echo (explode('/', $_SERVER['SCRIPT_NAME'])[-3]); //これはエラーになるけど
と言いたかったんです
スレ汚しすいません
0843nobodyさん
2007/02/21(水) 12:43:14ID:nuUqtd8Pどこかに図解で説明してあるウェブサイトはありますでしょうか?
0844nobodyさん
2007/02/21(水) 13:15:15ID:???ttp://www.kab-studio.biz/Programing/Codian/Pointer/05.html
0848nobodyさん
2007/02/21(水) 13:32:19ID:gybahh3H(float)microtime()で大丈夫でしょうか?
microtime(true)はPHP5からですもんね・・・
0849843
2007/02/21(水) 13:37:16ID:???0851nobodyさん
2007/02/21(水) 13:42:48ID:???PHPでは基本的に無理。
かろうじて無名関数っぽいのが書けるぐらい。
>>848
http://jp.php.net/manual/ja/function.microtime.php
ズバリそのまま書いてあんじゃん。
0852nobodyさん
2007/02/21(水) 13:55:49ID:gybahh3H0853nobodyさん
2007/02/21(水) 14:02:33ID:???0855nobodyさん
2007/02/21(水) 18:43:43ID:UzIeN8wCはじめての試みなので、わからないことだらけで困惑しています。
とりあえず基礎的な質問かもしれませんが、
最初の1回のみ行う、テーブル生成などのスクリプトは独立させるべきですか?
それとも毎回、テーブルがあるかチェックしてなかったら生成などの処理をするべきでしょうか?
0856nobodyさん
2007/02/21(水) 18:56:12ID:3GZpY9r/以下のコードを試しましたがダメでした。
class test{
public static function testMethod(){
}
}
$method="testMethod";
test::$method();//true
$class="test";
$class::testMethod();//false
0857nobodyさん
2007/02/21(水) 19:02:16ID:???テーブルの有無のチェックなんぞ要らん
最初にちゃんとテーブル作ってある前提でコーディングすればよし
そんな心配をするよりも、キッチリとテーブル定義をまとめたものを作成しておけばいい
それと、PHPが関係しないDBだけのネタだったらDB板があるのでそっちでどうぞ
http://pc10.2ch.net/db/
0858nobodyさん
2007/02/21(水) 19:10:05ID:???それは、つくりによるだろうな。
例えば、ユーザーがアクセスするたびに、ユーザー毎にユーザー名で
テーブルを作成する場合はCREATE&DROP処理が必要になるし、
そのチェックも必要になる。
昔、そんな面倒な実装を業務でやった記憶も・・・
0859nobodyさん
2007/02/21(水) 19:11:17ID:???その場合はcall_user_funcするしかないんじゃないかな
$class = 'test';
$method = 'testMethod';
call_user_func(array($class, $method));
0863nobodyさん
2007/02/21(水) 19:58:09ID:tXMCaPjX日本語が不適切です。
「ちょっと」と「ひどい」「すぎる」との言葉の係り受けが意味的に矛盾しています。
「それは、酷過ぎる。」又は「それは、ちょっと悪い。」のどちらかに修正するのが良いでしょう。
0864軟式PHP
2007/02/21(水) 20:13:35ID:???今、他人が作ったプログラムの保守してたんだが、こんなのがあった。
チェックボックスにチェックが入ったデータを削除する処理らしい。
#削除処理
for($i=0;$i<10000;$i++)
{
$sWork = $qvPARAM{'qvDEL'.$i};
・・・
頑張るよ俺。
0865nobodyさん
2007/02/21(水) 20:14:15ID:C4RH95/q$id_set="1,"; //検索したいID名
$sql = "select * from box where id_name like '%$id_set%' ";
$rst = mysql_query($sql,$con);
while($row = mysql_fetch_array($rst)){
echo "登録IDは".$col["id_name"]."<br />";
}
boxテーブルのid_nameに登録しているレコードが
(a)"1,11"と(b)"1,"と2つあるとします。
上記の$id_setに1を指定するとaとbの両方のレコードが表示されます。
$id_setにカンマを付けて1,としても両方のレコードが表示されます。
しかし、目的としてはあくまで「1」の値だけを持つレコードを表示させたいので
(b)が表示されなければいけないのですが、うまく行きません。
DB的な事が絡みますが、アドバイスいただけないでしょうか?
0866865修正
2007/02/21(水) 20:15:35ID:???の箇所の$colは$rowの間違いです。。
0867nobodyさん
2007/02/21(水) 20:22:45ID:tXMCaPjXそんなに1だけを表示させたければ、カンマを捨てて正規化だけを考えよ。
そうすれば、バグの姿もはっきりとその目に映ろうぞ。
バグの姿が存分に見えたとき、又、このスレに現れよ。
0868865
2007/02/21(水) 20:28:58ID:???そうなんです。カンマじゃ数字が被ってしまって、無理だと思って・・。
とはいえ、スペースを空けるのも変だし、別の文字にするのも使いにくいしで・・。
「正規化」ってなんなんでしょうか?正規表現とは違いますよね?
0869nobodyさん
2007/02/21(水) 20:38:51ID:tXMCaPjX何を言うとるんじゃ。正規化じゃ。
そんなに正規化が嫌なら、データの入れ方を工夫せい。
1,2,3→<data>1</data><data>2</data><data>3</data>
これで、<data>1</data>で検索じゃ。
0870nobodyさん
2007/02/21(水) 20:42:54ID:???パフォーマンス考えたら別によくあることだが。
正規化厨は大規模サイトでも
1コのテーブルに1億も10億もレコードつっこむの?
0871865
2007/02/21(水) 20:55:20ID:???正規化の件、ググって調べました。言葉を知らずに使ってましたw
ただ、正規化のようにテーブルを分けるとテーブルが増えすぎてしまうので
865のように1つのフィールドで処理出来ないものかと思ってました。
データの入れ方をもう少し工夫してみます。アドバイスありがとうございました。
0872軟式PHP
2007/02/21(水) 21:06:34ID:???0874nobodyさん
2007/02/21(水) 21:21:52ID:???自動発行するようなもので人間が裏に張り付いてテーブル作るなんて考えられんしw。
>>864
俺は猛烈に感動した;;
0875nobodyさん
2007/02/21(水) 21:28:09ID:???デフォルトであれば、セッションを作るときにサーバー側でファイルを作成する。
このセッション用のファイルを作る変わりにテーブルを作ることも不自然ではない。
テーブルも実体はファイルであることを考えれば、
ファイルを作ろうが、テーブルを作ろうが、それは朝三暮四というもの。
結局は、自分が慣れていないやり方に違和感を感じているだけに過ぎない。
0876nobodyさん
2007/02/21(水) 21:31:02ID:???$var = str_replace( '\\\\', '\\', $var )
であってますでしょうか?
エスケープが重なって小さい脳みそがパンクします。
0877nobodyさん
2007/02/21(水) 21:40:20ID:???て
ま
い
り
ま
し
た
0878nobodyさん
2007/02/21(水) 22:25:47ID:???セッション変数のflgという変数にtrueをセットした後、
header("Location: ./hogehoge.php");
foobar(); // なんかてきとーな処理。
というコードを書いた場合、たまにですが、flgの値が""になることがあります。
どういった原因が考えられるでしょうか?
foobarではセッション変数関係はいじっていません。
p.s.
locationヘッダに書き込んだ後、foobar()を実行しても意味ないと思うので
コード自体は変更はしておいたのですが、原因が気になるので
質問させていただきました。
0879nobodyさん
2007/02/21(水) 22:27:29ID:???すいません。環境を書き忘れていました。
FreeBSD上のphp 4.4.4です。
0881nobodyさん
2007/02/21(水) 22:55:18ID:???正規化すれば確かにテーブルは増えるだろうけど、
増えすぎるって、なんか勘違いしてる可能性があるな。
もうちょっとちゃんと理解するか、
もっと具体的な例をあげるかすればいいと思う。
>>858=>>870=>>875
セッションデータ格納のためってことなら、
レコード追加するならわかるが、
テーブル追加はないない。
0882nobodyさん
2007/02/21(水) 22:58:27ID:???くっつけるのがなんか嫌
ってのは俺だけ?
0883nobodyさん
2007/02/21(水) 23:00:03ID:???0884nobodyさん
2007/02/21(水) 23:01:59ID:???別に誰も強制せんよ
0885nobodyさん
2007/02/21(水) 23:07:35ID:???0886nobodyさん
2007/02/21(水) 23:10:34ID:???0887nobodyさん
2007/02/21(水) 23:10:56ID:???テーブル追加がないってことは
銀行の通帳明細だろうが電話の通話記録だろうが
全ユーザーのデータを1つのテーブルにいれるんだね。へぇ〜
0888nobodyさん
2007/02/21(水) 23:15:04ID:???0889nobodyさん
2007/02/21(水) 23:19:33ID:Sgt8YP2Kで、2,3,4を選んだとしたら フォームから送られるpostで
皆チェックボックスの値をどういう形でDBへ保存してる?
0890nobodyさん
2007/02/21(水) 23:21:49ID:???大人気スレッド★206が大人気★
各板から2ちゃんねらが大集結して、現在炎上中
206 名前:可愛い奥様[] 投稿日:2007/02/20(火) 15:59:04 ID:bbuJrbBF0
子供2人とも旦那の子じゃない
どっちも父親は元彼
結婚後もずっと続いてて、旦那の出張中に彼と4人で家族ごっこしてた
そのうち元彼をパパと呼ばせようと思ってます
私にとってはこっちが理想の家族だし
旦那には悪いけど、もうATMとしか思えない
いっそ浮気してくれたら慰謝料たっぷりもらって離婚出来るのに
私にベッタリだから余計腹が立つ
0891nobodyさん
2007/02/21(水) 23:22:48ID:???あれば教えてえらいひと。
0892nobodyさん
2007/02/21(水) 23:26:01ID:???どんなDB設計を想定してんのかわからんけど、
テーブル分割はスケーラビリティの話。
スケーラビリティの話でも>>875のように
1ユーザー毎(またはセッション毎)に
テーブルを作るのはまともじゃない。
■ このスレッドは過去ログ倉庫に格納されています