【PHP】下らねぇ質問はここに書き込みやがれ 61
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/01/27(日) 18:17:59ID:jK32tI//PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 62
http://pc11.2ch.net/test/read.cgi/php/1199956159/
◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0285nobodyさん
2008/01/30(水) 09:40:36ID:???色々あるからぐぐれ
0286nobodyさん
2008/01/30(水) 09:47:42ID:???>>284
captcha側からコードを読んで実装するのが面倒なので、ふたばのスクリプトがバージョン
アップしていて、かつ配布されていないかと思って質問したのですが該当しそうなところは
ないものでしょうか?
>>285
上記のことに関連しますが、スパム対策のコードを埋め込んでというのが面倒なのです
該当するようなところは既に検索(Google)してみたのですが、
どこも2005年くらいでバージョンアップが止まっているようでして…
0287nobodyさん
2008/01/30(水) 09:48:57ID:???0288nobodyさん
2008/01/30(水) 10:38:33ID:9nM+3WHh検索結果として「100円〜」「〜1000円まで」「100円〜1000円まで」
という3パターンがあるかと思います。(※値は仮です)
これをMySQLのWHERE部分として検索する場合、
if(!empty($price1) && empty($price2)){ //price1のみ
$search_key = "price>='$price1'";
}elseif(empty($price1) && !empty($price2)){ //price2のみ
$search_key = "price<='$price2'";
}elseif(!empty($price1) && !empty($price2)){ //両方
$search_key = "price BETWEEN '$price1' AND '$price2' ";
}
としているのですが、ソースが長くなりすぎて困っています。
何か良い書き方はないでしょうか?
0291288
2008/01/30(水) 11:27:38ID:???そうすると、それようのソースも検索項目毎に必要になるので
ソースの簡略化にはならないと思うんです。
>>290
もちろん、出来るから良いのですが、同じような範囲検索項目があると、
ソースが長く成りすぎるので、それが何とか出来ないものか?と思い、質問しました。
0293288
2008/01/30(水) 11:37:35ID:???クラスかですか。クラスというか、多少関数化しているのですが
もう少し考えてみます。
あと、一度質問した後はsageにするのがルールだと思うので、
なにもカス呼ばわりしなくても・・・
0295nobodyさん
2008/01/30(水) 11:44:59ID:???それが2ちゃんクオリ(ry
0296nobodyさん
2008/01/30(水) 11:45:08ID:???0297nobodyさん
2008/01/30(水) 11:46:38ID:???各スレにテンプレあるのはご存知で?
>>296
あれ?
> ・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
これ読めないの?
0298nobodyさん
2008/01/30(水) 11:47:24ID:???if (!$price2) $price2 = "0";
$search_key = "price BETWEEN '$price1' AND '$price2' ";
0300nobodyさん
2008/01/30(水) 11:52:03ID:???> (!$price1)
実際この書き方ってどうなのかな?
Noticeエラーでも気になってしまうから、ついついisset使ってしまう
0302278
2008/01/30(水) 11:59:09ID:???そのphpを閉じた場合のセッション、タイムアウトがあるんですね
30分続いているということはタイムアウトは長いというより、無効ですよね…
0304nobodyさん
2008/01/30(水) 12:06:19ID:???いきなり使うなら、issetとか、@とか使うのもOKだろうけど、
この場合あらかじめ $price1 = $_POST["foo"] とかで、あらかじめ何らかの値が代入されているという条件があると思って書かなかった。
>>302
デフォルトなら、max_execution_time以上のCPU時間を使うとdieされるし、
そもそもbreaなんて書いたらコンパイル時にはじかれて、実行できないと思うのだが。
0305nobodyさん
2008/01/30(水) 12:07:39ID:???あれ?
$price1 = $_POST["foo"]
これでPOSTが空でもNotice出なかったっけ・・・
勘違いかな
0306nobodyさん
2008/01/30(水) 12:16:51ID:Pk8IBekk>コンパイル時にはじかれて、
そういえばそうですよね……あれ?
max_execution_timeを見てきます
0307nobodyさん
2008/01/30(水) 12:56:50ID:iTZE6D8S手軽にパフォーマンス測定したいだけなんだけど、デスクトップだと色々とノイズが多いので。
使ってる PHPは Ver5.2です。
0308nobodyさん
2008/01/30(水) 13:01:26ID:???> デスクトップだと色々とノイズが多いので
この部分がいまいち良く分からない。
デスクトップ上ですべてを動かすんじゃなくて、
サーバを別にするしかないんじゃないの?
0309nobodyさん
2008/01/30(水) 13:05:17ID:iTZE6D8S手軽に試したいだけ。
たとえば、頻繁に呼ばれる関数内で、要素が数個の配列を毎回生成するのはコスト的に
どうだろうかとか、そんなレベルの話。
デスクトップで実行して実時間を計測しても、イマイチ信用できないし。
0310nobodyさん
2008/01/30(水) 13:09:35ID:???実行時間の計測にはPEAR::Benchmark_Timerとかかなぁ。
PHP以外のプログラムを使って計測したいのならば、別な板の
話になると思うけど。。。
0312nobodyさん
2008/01/30(水) 13:27:39ID:iTZE6D8Shttp://pear.php.net/manual/ja/package.benchmarking.benchmark.timer.php
これですか、すばらしい。
ぐぐったら、 http://www.1x1.jp/blog/2006/10/php_source_tips.html も見つかったんだけど、
array_push が [] = より 60%も遅いというのは、ちょっとショック。
array_push の方が変数名間違えたときに警告メッセージが出るから好きなんだけどなぁ。
>>311
こちらも調べて見ます。
どうも、ありがとうございました。
0313nobodyさん
2008/01/30(水) 14:22:33ID:02p0qHbLまぁ、何も返さないからかな?
今までmicrotime()で頑張って計算してたが、PEAR::Benchmark_Timerが便利すぎて泣いた
0314nobodyさん
2008/01/30(水) 16:39:05ID:???だから、CakePHPなんかよりPEARのライブラリーの方が使い勝手がいいってことだよ。
だって、PEARは日本語に直すと、梨。問題なし、なんちゃって(核爆)
0315nobodyさん
2008/01/30(水) 16:42:07ID:???r'つ)∠─── ヽ
〆⌒  ̄ ̄ ̄ \__r 、 \
,.イ ,イ \ヽ,\rv-,
ヾイ /{ { ヽ、ト、 \Y <ノノ\
{ .ト{\ヽ', メ __\ } ⌒ヽ }へ
ゝ |"ひ) \ イびゞ \ ヽ- 、ノ // >=
ノ ト、"´,. ー ノ ///\/ / \
/. { ゝ / レ// } Y´ \
{ ヽ ヽ⌒> / レ´TTア⌒>、_ \
V{ \ └ ´ / ,.イ/ /ll | /≦__ }
V{ >ー┬|/ ! ,.イノ || | /  ̄ ̄ ̄ /
リヽイ| /:| l _|' '´ || | | _/
/{{ | |===| || | __/
/し|| | |== / // | /,.イ
/ ヽヽ l==| / / l
/ イ\ \=| /// 〃
〈 ≧ー < ミ ヾ| // ト
\ \ \>∠、 /\
\ \ <〆ハ ゝ _/ \
{ / ̄> X〜ヾ´ ー'´ \
 ̄</⌒Y \ ',
\/ ノ | ',
_/ / / |/ ト、
/ / \ / |ー } ヽ
\/ / l /
ト、 / _ l /
/ ヽ/____/┬─ 、____/
/ ノ | /
/ / l /
0316nobodyさん
2008/01/30(水) 17:07:21ID:???0317nobodyさん
2008/01/30(水) 18:26:07ID:???public function __set($name, $value){
echo "Hogehoge::__set".$value;
}
}
class SimpleXMLElement2 extends SimpleXMLElement{
public $obj;
public function __set($name, $value){
echo "SimpleXMLElement2::__set".$value;
}
public function setObj($obj){
$this->obj = $obj;
}
}
$hogehoge = new Hogehoge();
$hogehoge->hoge = '11111';
$simpleXMLElement2 = new SimpleXMLElement2('<?xml version="1.0" encoding="utf-8"?><hoge></hoge>');
$simpleXMLElement2->hoge = '22222';
$simpleXMLElement2->obj = $hogehoge;
$simpleXMLElement2->setObj($hogehoge);
出力結果:
X-Powered-By: PHP/5.2.5
Hogehoge::__set11111<br />
<b>Warning</b>: It is not yet possible to assign complex types to properties in <b>*****</b> on line <b>20</b><br />
<b>Warning</b>: It is not yet possible to assign complex types to properties in <b>*****</b> on line <b>13</b><br />
最終的な目的はSimpleXMLElementを継承したクラスのプロパティにオブジェクトを格納したい。
string以外なのでWarningが出るので、__set()をオーバーライドしてしまえと思ったが、どうもSimpleXMLElement2::__set()が機能してないようだ。
何かが悪いのか、__setを使わない方法があるのか、別な実装方法があるのか・・・
手が空いている方がいましたら、お手数ですが教えていただければと思います。
0318nobodyさん
2008/01/30(水) 18:27:32ID:???0319nobodyさん
2008/01/30(水) 20:04:09ID:???> だから、CakePHPなんかよりPEARのライブラリーの方が使い勝手がいいってことだよ。
両方組み合わせ使うもんだろw
フレームワークとライブラリじゃ役目が違う。
全体的な構造にCakePHP(やそのほかのフレームワーク)を使い
局所的な部分にPEARなどのライブラリを使う。
0320nobodyさん
2008/01/30(水) 20:31:55ID:???0322nobodyさん
2008/01/30(水) 21:32:04ID:???<?php
$ua = $_SERVER["HTTP_USER_AGENT"];
if(ereg("DoCoMo|J-PHONE|Vodafone|MOT|SoftBank|UP\.Browser|~ /^KDDI/|DDIPOCKET|WILLCOM",$ua)){
header("Location: モバイルページURL");
exit;
} else {
?>
<HTML>
PC用ページhtml
</HTML>
<?
exit;
}
?>
それ以外のページで同様に携帯以外(上記PHP内UA以外)からのアクセスを全てトップページ(PC用ページ)に飛ばすようにするにはどうすればよろしいでしょうか?
このPHP自体は以前に検索で見つけたものなのですが、今検索するとどのページで見たものかわからず困っております。(-.-;
どうかよろしくお願い致します。
0324nobodyさん
2008/01/30(水) 21:42:37ID:???昨日から死んでるだわ。どっかで最新版落とせるところない?
0327nobodyさん
2008/01/30(水) 21:56:51ID:???0328322
2008/01/30(水) 21:58:05ID:???どうもありがとうございます!
0329nobodyさん
2008/01/30(水) 22:00:02ID:???if(!ereg("DoCoMo|J-PHO ...
header("Location: http://www.example.com/pc.html");
ここはプログラム書く人の板なんでそういう質問は嫌われるよ
丸投げスレに持ってくると誰かやるけど
0330nobodyさん
2008/01/30(水) 22:04:41ID:???何でObjectが突っ込めると思ったのか理解できない
永続化が必要ならJSON使うなりSerializeするなり汁
0331nobodyさん
2008/01/30(水) 22:25:08ID:???> Smartyを使いなさい。
CakePHPを使ってから、Smartyに興味がなくなったな。
PHPという言語自体がテンプレートに近いものだから、
ロジックとビューがちゃんと分かれていれば、そのままで問題が無いことに気づいた。
0332nobodyさん
2008/01/30(水) 22:31:46ID:k3DrvwtH> PHP使ってるヤツらって
> htmlspecialchars($_GET['text']);
> こんなコード書いてる!
> m9(^Д^)プギャー
とありますが、上のコードの何が問題なんでしょうか?
教えて下さい。
0333nobodyさん
2008/01/30(水) 22:32:21ID:???>PHPという言語自体がテンプレートに近いものだから、
>ロジックとビューがちゃんと分かれていれば、そのままで問題が無いことに気づいた
同感
0334nobodyさん
2008/01/30(水) 22:32:36ID:???Smartyは協業する上で何かしら標準が必要だから使ってるだけ
これはCakeを使おうが代替できない機能
やっぱフォーム-ロジック-DBの操作を楽にしてくれてウィジットを
サポートするモダンなFWじゃないと
ルール縛りだけではやはり時間が掛かるよ、柔軟性もないし
0335nobodyさん
2008/01/30(水) 22:36:49ID:???> これはCakeを使おうが代替できない機能
なんで?Cakeの方が幅広く協業できると思うけど?
SmartyはCakeのビューの部分だけでしょ。協業できるのは。
> やっぱフォーム-ロジック-DBの操作を楽にしてくれてウィジットを
> サポートするモダンなFWじゃないと
それなら、Smartyなんて問題外じゃん。
0337nobodyさん
2008/01/30(水) 22:38:56ID:???そうするとポストバックが結構面倒だけど、なんかいい方法無いかね。
0338nobodyさん
2008/01/30(水) 22:39:48ID:???読んでないけど、システムの抽象度が低いとかいうことかな
そういうコードをいちいち書くのはうっかりミスという脆弱性の温床になる
しかし標準出力がかってにエスケープされる言語なんて存在しないわけで
小さいアプリじゃごく自然な対応だと思うけどね
あるいはhtmlspecialcharsはNULLですり抜けられた時代に書かれた文章かな
0340nobodyさん
2008/01/30(水) 22:43:08ID:???> ロジックとビューを分けるのってやっぱ物理的にファイルを分けてる?
> そうするとポストバックが結構面倒だけど、なんかいい方法無いかね。
だから、そのいい方法(の一つ)がCakePHPのやり方なんだってw
0342nobodyさん
2008/01/30(水) 22:47:07ID:???貴方はオブジェクト指向病にかかっていると思われ
自力学習の間は時間が無限大なのでそれでやっていけるが
社会に出るとその時間がなくなりスパゲッティーコードを生産する作業に変わりますw
0343nobodyさん
2008/01/30(水) 22:47:32ID:???めんどくさいから正直に書いちゃうけど、バカなワナビー君には理解できないんだねえ
だからその上での議論も成り立たない、言いっぱなしで生産性もない、と
反省しなさいよ
0348nobodyさん
2008/01/30(水) 22:52:56ID:???CakePHPの一部のビューの部分にSmartyを使えばいいだけのこと。
CakePHPはSmartyなんかよりも幅広いものを対象としているので、
それでCakePHPを使わないという理由にはならない。
0351nobodyさん
2008/01/30(水) 22:54:54ID:???CakePHP使ってみようと思ったがなんかキモい奴になりそうでやめたわw
0352nobodyさん
2008/01/30(水) 22:55:30ID:???PHP総合雑談スレ
http://pc11.2ch.net/test/read.cgi/php/1200314111/
0354nobodyさん
2008/01/30(水) 22:56:26ID:???だれがそんなにSmarty使いたいのか知らんけど
幅広いと言ってもCakePHP⊃Smartyでないことはすでに指摘されてる
CakePHPを使わずSmartyを使えと言うレスは見当たらないけど?
0356nobodyさん
2008/01/30(水) 22:56:47ID:???お互い持論を主張して俺様が正しい、って奴ばっかだなw
この業界、こんな人間しかいないのか?w
0358nobodyさん
2008/01/30(水) 22:59:00ID:???お前みたいに「Cake馬鹿」っていって時点で同類だろ
Cake馬鹿程度も受け入れられないんじゃ程度がしれてるわ
0360nobodyさん
2008/01/30(水) 23:01:09ID:???CakePHPを忘れなさい
0361nobodyさん
2008/01/30(水) 23:01:32ID:???CakePHPではコードジェネレータがついている。
といっても一アクション(一ページ)あたりほんの20行程度の短いものだが。
コードジェネレータの出力、もしくはチュートリアルのコードをベースに
そのアプリ独自のロジックを書いていくわけだが、
この標準のやり方が、ポストバックになっているぞ。
(もちろんそうじゃないやり方もできる。)
0362nobodyさん
2008/01/30(水) 23:02:40ID:???忘れてどうするんだw
そのほかのフレームワークを使うっているのなら話はわかるが
ライブラリだけじゃ、この先やっていけないよ?
0364nobodyさん
2008/01/30(水) 23:09:31ID:???0365nobodyさん
2008/01/30(水) 23:10:33ID:???0366nobodyさん
2008/01/30(水) 23:13:12ID:???コードをロジックとテンプレートに分けようと思っています。
そのときなるべく面倒なことはしたくないので、
たとえば、http://localhost/controller/action/123
というアドレスにアクセスしたいとき、
contorllerクラスのactionメソッドを呼ぶようにしたいです。
またそのときに使用するテンプレートを/views/controller/action.ctp ファイルに使用と思っています。
これらは必要に応じて、柔軟に変更できるようにしたいです。
たとえば設定しだいで、http://localhost/123 でもデフォルトの動きとして controller/actionが実行されたりです。
いい関数ありませんか?
0367nobodyさん
2008/01/30(水) 23:13:59ID:???0369nobodyさん
2008/01/30(水) 23:17:50ID:???CakePHPの信者共が出張して宣伝活動していることだけはわかった
いいからCakeBBSに帰れw
0370nobodyさん
2008/01/30(水) 23:19:55ID:???PEARは知識。CakePHPは実践。
0371nobodyさん
2008/01/30(水) 23:23:02ID:???もっと知れ渡るように布教活動でもしてるのか?
0372nobodyさん
2008/01/30(水) 23:25:22ID:???0373nobodyさん
2008/01/30(水) 23:28:41ID:???0375nobodyさん
2008/01/30(水) 23:31:59ID:???0376nobodyさん
2008/01/30(水) 23:34:46ID:???0377nobodyさん
2008/01/30(水) 23:38:34ID:9rDWoCR8環境はmysql 5.0.54、PHP 5.1.6で実行しました。
例えば、
$res = $pdo->query('SELECT avg(column) FROM table');
を実行するとどこかで失敗しているとおもわれます。(エラーは何もない)
このavgを含むとfalseが返されます。
その後に$pdoの中を見ると、通常ではクエリ実行後にはqueryStringプロパティに実行したクエリがセットされるはずですがセットされていません。
もちろん、直接mysqlにこのクエリを打つと正しく返ってきます。
検索してもPDOにそれっぽいバグ報告ありませんが、ご存知の方いませんか?
0379377
2008/01/30(水) 23:44:52ID:9rDWoCR8CakePHPでダメでした。
0382nobodyさん
2008/01/30(水) 23:54:52ID:9rDWoCR8PDOがavgを含むクエリに失敗する理由がわかりますか?
>>381
クエリ自体に問題はありませんが、PDOはいかなるときもgroup byが必要ということでしょうか?
知ってる人が見つかってよかったです。
ありがとうございます。
0383nobodyさん
2008/01/30(水) 23:58:02ID:9rDWoCR8うそつき、ハゲ!
意味なくgroup by入れたけどやっぱりダメでした。
コマンドラインでは成功しました。
PDOはダメってことですか?
0384nobodyさん
2008/01/30(水) 23:59:22ID:???■ このスレッドは過去ログ倉庫に格納されています