【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
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0757754
2007/02/20(火) 15:40:27ID:???ちょっと書き方が分からないのですが、、、
preg_match("/http://([0-9a-zA-Z])[\"]/",$html_code,$html_array);
ではないですよね?
0758nobodyさん
2007/02/20(火) 15:44:30ID:???0759nobodyさん
2007/02/20(火) 15:44:33ID:???> 商用の場合MySQLはタダじゃない
どこにそんなライセンスがある??
商用の場合だってタダのケースが多々あるぞ。
逆に言えば、どのケースの場合が有料なのかを示してほしいね。
そっちのほうが少ないから。
0760nobodyさん
2007/02/20(火) 15:44:54ID:/OHhVetqありがトン
セキュリティーはSSIで対応するとして、ワンクリックで課金というようなものでもないです。
ただ、内部のものが気軽にいじれるんでは困るので…
postgreSQL調べてみます。
0762nobodyさん
2007/02/20(火) 15:52:55ID:rS4uJTurif (条件) {
$str = "string";
return $str;
}
return true;
}
こんな感じで、条件によって返り値の型が違うのですが、
問題ないでしょうか?
0763nobodyさん
2007/02/20(火) 15:54:26ID:???はいはい、じゃああんた商用のプログラムのソースコードを公開しなさい
http://www.mysql-partners-jp.biz/license.html
0764nobodyさん
2007/02/20(火) 15:55:29ID:???動くか動かないかで言えば動く。
でも普通、返り値があるならそれを、そうでなければ false を返した方が
自然な流れじゃね?
修正したりするときも、そっちのがわかり易いと思う。
0765nobodyさん
2007/02/20(火) 15:57:26ID:rS4uJTurやっぱそうですよね。
他の書き方に変えたいと思います。
どうもありがとうございました。
0767nobodyさん
2007/02/20(火) 16:00:02ID:???0769nobodyさん
2007/02/20(火) 16:03:15ID:rS4uJTurfunction hoge() {
if (条件) {
$str = "string";
return $str;
}
return false;
}
これなら大丈夫でしょうか?
0771nobodyさん
2007/02/20(火) 16:10:11ID:rS4uJTurどうもありがとうございます。
これでまた少し賢くなりました。
早速続き書いてきます。
0772nobodyさん
2007/02/20(火) 16:54:56ID:wxBC7nWrこういう関数を作る時、false→エラーとなるような場合には
・関数内でエラー処理までさせる
・返り値で判別させる
と迷うのですが、普通はどちらにするものなのでしょうか。
今は関数の使いどころに応じて使い分けています。
0773nobodyさん
2007/02/20(火) 16:59:56ID:???普通かどうかはわからないが
if (!$str = hoge()) {
error();
}
とかやって、falseを返してエラー関数を呼び出すな
0774nobodyさん
2007/02/20(火) 17:33:09ID:???関数・クラス設計上ありえないエラーは、内部で
無理やりExitさせたりしてる。
入力によっては有り得るエラーはCall元で処理させてる。
0775nobodyさん
2007/02/20(火) 17:40:17ID:???関数内でエラーチェックさせてると、後で見たときにエラーチェックをしているかどうかを
関数の中を見ないといけないのが面倒だし、返り値でfalseを使う以上、
返り値を見るのがスジかなあと思っているので。
ただし、その関数があちこちで呼ばれているなどで、関数内で判断させた方がいい場合もあるし、
一概には言えない。
主な仕様を決めてしまって、それにのっとってやるのが良いと思う。
0776nobodyさん
2007/02/20(火) 17:54:07ID:???0777nobodyさん
2007/02/20(火) 17:56:03ID:???0778虚弱PHP
2007/02/20(火) 18:05:14ID:???throwも問題はあるから、あんまり使いまくるのは良く無さそう。
0779nobodyさん
2007/02/20(火) 18:21:32ID:???MySQLのダメダメなところは、そのライセンス体系の複雑さと曖昧さ。
「再頒布しないのならライセンス不要」と言ってる一方で、
「■MySQLを含んだソフトウェアを顧客に販売し、顧客が自身のマシンに当該ソフトウェアをインストールする場合」はライセンスが必要だとも言っている。
この両者は矛盾する。
なぜなら、「頒布」という言葉は多数に広く配布することだから。
ある特定の顧客一人(一社)に有償で譲渡することの何が「頒布」に当たるのか? MySQL ABはその辺がダメだ。
0780nobodyさん
2007/02/20(火) 18:24:18ID:???もちろんその解釈じゃ駄目なんだろうけど。
0781虚弱PHP
2007/02/20(火) 18:28:46ID:???ライセンス発行してる会社ですら曖昧な事しか言わなくなる。
心配ならライセンス買っとけって言われるんだよね。
というわけで、俺はMySQLライセンスをきちんと理解してませんw
0783nobodyさん
2007/02/20(火) 18:32:48ID:qg/4MsFw以下のクラスを$action->IP_Check($_SERVER['REMOTE_ADDR'])
で呼び出してみたところfgetsとfcloseで"supplied argument is not a valid stream resource"
とエラーログを吐かれました。これは「クラス内でファイルを読み書きするな」ってことですか?
というか、オブジェクト指向はこんな記法であってるでしょうか?
class IP_Check{
function IP_Check( $IP ){
$fp = fopen($IPchecklog, "r");
$compareIP = fgets($fp, 1024);
fclose($fp);
if($IP == $compareIP){ return false; }
else { return true; }
}
}
0784nobodyさん
2007/02/20(火) 18:34:17ID:???本当にファイルがopenできてる? 失敗しているんじゃない?
fopenしたあとの$fpの値を調べてみるよろし。おそらくfalseになってる。
0786nobodyさん
2007/02/20(火) 18:40:50ID:wxBC7nWrやはりそういうものですか。
参考になりました、ありがとうございます。
0787783
2007/02/20(火) 18:45:20ID:qg/4MsFw方々のご推察の通り$IPchecklogがクラスの外にあり、
ファイルオープンできてませんでした。
ありがとうございました。
コイツは前途多難だな .... orz
0788nobodyさん
2007/02/20(火) 18:48:46ID:???結果をチェックしないほうが事態が面倒くさくなることのほうが多いぞ
0789虚弱PHP
2007/02/20(火) 18:51:45ID:???throwはgoto文より強力な制御構造だから。
使い方に注意しないと、
本当にやるべきことをやってるのか後で確認するのが辛くなる。
小規模だったら問題ないと思うけど。
0790nobodyさん
2007/02/20(火) 18:53:49ID:???結果チェックより事前チェックだろw
できるだけ早い時期に障害を見つけるのが肝要だ。
fileの処理でいうなら、ファイルを開く前にファイルの存在チェックや
読み取り(書き取り)可能かをチェックすることだ。
0791nobodyさん
2007/02/20(火) 19:07:11ID:???オブジェクト指向ってのは書き方の概念というか
抽象的な物だからこれが正解ってのはないけど
そんな感じに一つのオブジェクトでの役割を簡潔にして
同じような処理は関数化しておいたりして
組み立てていく感じでいいと思うよ。や、俺もよくわかってないが…
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
■ このスレッドは過去ログ倉庫に格納されています