【PHP】下らねぇ質問はID出して書き込みやがれ 102
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/12/18(土) 20:07:33ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 101
http://hibari.2ch.net/test/read.cgi/php/1289793607/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0552nobodyさん
2011/01/13(木) 11:27:19ID:???空きポートにpingを送って、通るか否か調べるって事だろ?
さすがにヒントも糞も無いと思うんだが・・。
0554546
2011/01/13(木) 11:31:24ID:HlCtfQfpいや・・・>>548でも書いた通り「PHPのWeb上で」表示させたいのです・・・
でもPHP上でping送信を使えばいいのかな
>>553
ageるほどでもないと思っていたので失礼しました
0555nobodyさん
2011/01/13(木) 11:35:33ID:???全てのサービスを同一のパソコンで稼動させていたとしても、
結局は素直に各サービスのポートを叩いて確認するしかないのでは?。
0556546
2011/01/13(木) 11:40:45ID:HlCtfQfpまさにそんな感じです。
おそらくMMO運営は負荷軽減のため複数の回線を使用していると思いますが。
そういう別のWANの場合どう指定してあげればいいのかなという事です。
>>550のやり方ではWAN指定できなかったので、pingで跳ね返ってくるか確認という事でしょうか?
0557nobodyさん
2011/01/13(木) 11:44:45ID:???javascriptでどうよ。
http://www.gnucitizen.org/blog/javascript-port-scanner/
0558nobodyさん
2011/01/13(木) 11:45:27ID:???0559nobodyさん
2011/01/13(木) 11:47:23ID:???俺も鯖管理してるけど、ポートがふさがってる時は
だいたい鯖が落ちてるかiptablesの設定が悪いかだと思うけどな。
つまり、特定のポートだけ発生する現象ではないと思うが。
0560546
2011/01/13(木) 11:51:31ID:HlCtfQfpありがとうございます、ソース覗いてみました。
これ使えるかもしれませんね。PHP単体は諦めて1回試してみます!
>>559
ポートがふさがるっていう概念はどうかと思いますが
「使われていない」という状態はありますよ。
アプリを通してポートを完全に開通させ、アプリが終了してたらバウンドしなくなりますし。
0561nobodyさん
2011/01/13(木) 11:58:22ID:???fsockopenのところを他サーバのipアドレスにしたけど
俺のとこではちゃんと動いてるよ?
0563nobodyさん
2011/01/13(木) 12:42:18ID:???pingは通るけどサービスが死んでいるとかよくあるはなしさ
0565nobodyさん
2011/01/13(木) 15:51:08ID:eIBAKAY8この質問に答えてくれ
0566nobodyさん
2011/01/13(木) 17:48:30ID:???> WAN(外部)側のIPのポートが使われてるか
> そもそも特定のポートが「使われていない」状態ってあるのか?
開放しているか
> ちなみにポート開放のスキャン
空いているか
> 空きポートにpingを送って、通るか否か調べるって事だろ?
塞がっているか
> ポートがふさがってる時は
日本語での表現は難しい。
0567nobodyさん
2011/01/13(木) 17:59:33ID:NmcnbSQP携帯向けサイトを作る時、管理画面などでセッションの管理にクッキーを利用しない設定が必要ですよね。
でも、そのサイトをPCでも使うのなら、PCでの操作にはクッキー利用するのが普通だと思います
1)この条件を両立させたい場合、以下のようにするわけでしょうか?
・php.iniでクッキー利用を有効に
・携帯向け管理画面(ディレクトリが独立してるなら)のディレクトリに、クッキー無効の.htaccessを設置
また、そもそも.htaccessの効果がよくわかりません。
2)設置したディレクトリ以下に対して、http.confやphp.iniなどでの設定よりも優先される命令をできるってことですか?
3)1)についてですが、携帯向け管理画面のディレクトリが独立していない場合、
たとえばフレームワークを使っていてコントローラをPC版と共通化し、viewの出力のみ
携帯専用の出力させていいる時などは「.htaccessをディレクトリに設置」て無理ですよね。
その場合はどんな風に作ったら効率的なんでしょうか?
セッション使わないとなるとコントローラ・アクションのソースそのものが違ってくるから
素直に携帯向け管理画面コントローラとして独立させるのが結局賢くなるんでしょうか?
PC版と携帯版、どんな風に作るのが効率的で管理しやすいんでしょうか?
もちろんスキルによるとは思うので、参考として「こんな風にしている」という話を聞きたいです。
よろしくお願いします
(自分はphp5とzendFWを使っています)
0568nobodyさん
2011/01/13(木) 18:03:50ID:???そもそも携帯とPCでphp.iniの設定を分けなくて良い
PHPでケータイからセッションを使う場合の設定方法 | ke-tai.org
http://ke-tai.org/blog/2007/12/12/php_session_new/
0569nobodyさん
2011/01/13(木) 18:36:32ID:???> そのサイトをPCでも使うのなら、PCでの操作にはクッキー利用するのが普通だと思います
何が「普通」なのだろうか?
この発想から課題が発生しています。
0570nobodyさん
2011/01/13(木) 18:41:15ID:???0571nobodyさん
2011/01/13(木) 18:51:38ID:???0572nobodyさん
2011/01/13(木) 19:01:40ID:???携帯なら携帯固有情報をパソコンならクッキーを焼けばいい
セッションを張った時点で勝手に焼きよるけど
0573nobodyさん
2011/01/13(木) 20:16:36ID:???書いてる奴は理解してんの?
0574nobodyさん
2011/01/13(木) 20:24:06ID:???ディレクトリが独立してなくても.htaccessの中で機種判別して
携帯だったら〜を設定、ってすればいい。
.htaccessは対象ディレクトリに限ってhttp.confやphp.iniの設定を
上書きすると考えていい。
0576nobodyさん
2011/01/13(木) 21:58:58ID:???0577nobodyさん
2011/01/13(木) 22:06:09ID:???セッションハイジャック系が難なく出来る時点で終わってるわ
0578nobodyさん
2011/01/13(木) 22:17:18ID:???0579nobodyさん
2011/01/13(木) 22:25:00ID:???それは高木ちゃんも言ってるんだよね
0580nobodyさん
2011/01/13(木) 23:23:47ID:???判断するのはお前や高木じゃないことは確かだ
0581nobodyさん
2011/01/13(木) 23:28:42ID:???裁判記録を追ったりも出来ない情弱さんなら致し方ないかぁ…
0582nobodyさん
2011/01/14(金) 00:24:08ID:???もう>>552を責めないで下さい。
上から目線で無知を晒してしまって恥ずかしいとか、
質問者を少なからず混乱させてしまって申し訳ないとか、
そういった常識的な対応は匿名掲示板ですので期待しないで下さい。
0583567
2011/01/14(金) 00:43:04ID:???勉強になりました
0586nobodyさん
2011/01/14(金) 08:00:53ID:???0587nobodyさん
2011/01/14(金) 08:04:49ID:???0588nobodyさん
2011/01/14(金) 08:18:52ID:???それよりも森末慎二の話しようよ
0589nobodyさん
2011/01/14(金) 09:39:14ID:x5/cEkaG// 接続
$this->db = MDB2::connect(-省略-);
//接続が失敗したとき
if(MDB2::isError($this->db)){
echo "データベース接続失敗";
exit;
}else{
echo "データベース接続成功";
}
//準備
echo "テスト出力A";
$sql = "SELECT * FROM USER_TBL WHERE USER_NO = ?";
$stms = $this->db->prepare($sql);
echo "テスト出力B";
//実行
$res = $stms->execute(array(1));
//結果の取得
$row = $res->fetchRow();
print_r($row):
このようなソースを書いているんですがデータベース接続成功と
テスト出力Aは表示されますが、Bの表示がなくどうもprepareの所で処理が
終了しているようです。これは何が原因でしょうか?ご教授願います。
0591nobodyさん
2011/01/14(金) 10:08:43ID:x5/cEkaGすいません、B以降の表示が全てありません。
0592nobodyさん
2011/01/14(金) 10:44:19ID:???俺正直だからわからないときはわからないと言う
高木みたいに知ったかぶりはしない
0593nobodyさん
2011/01/14(金) 10:54:34ID:x5/cEkaGそうですか、ありがとうございます。
どなかたわかる方いらっしゃいますでしょうか?
0594nobodyさん
2011/01/14(金) 11:11:20ID:???0595nobodyさん
2011/01/14(金) 11:17:02ID:???たぶん、$stmsのオブジェクトが無い
0596nobodyさん
2011/01/14(金) 11:23:18ID:???0597nobodyさん
2011/01/14(金) 11:24:42ID:???0598nobodyさん
2011/01/14(金) 11:28:56ID:???if(PEAR::isError($stms)){
echo "prepare失敗". $stms->getMessage();
exit;
}
0599nobodyさん
2011/01/14(金) 11:32:09ID:x5/cEkaGありがとうございます。
オブジェクトが無いですか。
SQL文をそのままphpmyadminで
実行すると問題ないですし
prepareでなく、queryを使って
SELECT * FROM USER_TBL
を実行すると問題なく表示されました。
なぜかprepareのみの挙動がおかしい状態です。
0600nobodyさん
2011/01/14(金) 11:35:29ID:x5/cEkaGありがとうございます。
教えていただいたとおりにやってみましたが
テスト出力A以降はなにも表示されない状態です。
0602nobodyさん
2011/01/14(金) 11:37:10ID:???基本の基本
0603nobodyさん
2011/01/14(金) 11:39:30ID:???USER_NOが1のデータがないとかそういうことはないよね?
0604nobodyさん
2011/01/14(金) 11:44:18ID:x5/cEkaGありがとうございます。
display_errors = On
を入れてみましたが、表示はなにも変わりませんでした。
>>603
ありがとうございます。
はい、DBを確認しましたがデータは存在します。
0605nobodyさん
2011/01/14(金) 11:47:32ID:???0606nobodyさん
2011/01/14(金) 11:47:51ID:???echo "テスト出力A";
/*@*/ var_dump( $this -> db -> getMessage() );
$sql = "SELECT * FROM USER_TBL WHERE USER_NO = ?";
/*@*/ var_dump( $this -> db -> getMessage() );
$stms = $this->db->prepare($sql);
/*@*/ var_dump( $this -> db -> getMessage() );
echo "テスト出力B";
準備部分を上のように書き換えて、実行した結果はどうなりますか?
0607nobodyさん
2011/01/14(金) 11:54:06ID:x5/cEkaGありがとうございます。
ダウンロードしなおすべきでしょうか?
>>606
ありがとうございます。
表示されるものが変わりました。
Fatal error: Call to undefined function: MDB2_Driver_mysql::getMessage(). in -省略-MDB2/MDB2.php on line 1936
関数がないというエラーでしょうか。
0608nobodyさん
2011/01/14(金) 11:55:19ID:???display_errors = On
error_reporting = E_ALL | E_STRICT
log_errors = On
0609nobodyさん
2011/01/14(金) 11:59:16ID:???PEAR:MDB2 で getMessage() は使えないの?
0610nobodyさん
2011/01/14(金) 12:11:52ID:???出てないときは undefindになる・・・
0611nobodyさん
2011/01/14(金) 12:21:26ID:???しないとダメとかいうPHP4オチ
0612nobodyさん
2011/01/14(金) 12:26:25ID:x5/cEkaGありがとうございます。
やってみましたが、ダメでした。
レンタルサーバー : XREA
PHP : 5.2.5
MySQL : 5.1.22
0613nobodyさん
2011/01/14(金) 12:42:28ID:???最新バージョンを使っているせいかと思ったらFatal error多いーな
0614nobodyさん
2011/01/14(金) 12:45:43ID:???エラーが出ているときだけに使えるのならば、
// 準備
echo "テスト出力A";
$sql = "SELECT * FROM USER_TBL WHERE USER_NO = ?";
$stms = $this->db->prepare($sql);
/*@*/ var_dump( $this -> db -> getMessage() );
echo "テスト出力B";
これで使えるってこと?
0615nobodyさん
2011/01/14(金) 12:49:34ID:???情報の小出しに振り回される人々w
0616nobodyさん
2011/01/14(金) 12:52:24ID:???エラーがなければ$stms->getMessage()も undefinedだが。
0617nobodyさん
2011/01/14(金) 13:10:49ID:x5/cEkaG文字コードはファイル、DB共にUTF-8で統一しています。
>>614
やってみました。
しかし、出力Aまでしか表示されずエラーメッセージもありません。
>>615
フィールド名は何度か確認しましたが一致しています。
0618nobodyさん
2011/01/14(金) 14:57:03ID:???あとアンダバーで何かトラブルがあった気がする。
0619nobodyさん
2011/01/14(金) 15:09:17ID:x5/cEkaGqueryメソッドを使って
SELECT * FORM USER_TBLで読めました。
0620nobodyさん
2011/01/14(金) 15:20:32ID:???0621nobodyさん
2011/01/14(金) 15:31:15ID:x5/cEkaGhttp://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html
ここで確認しましたが、使っていませんでした。
0622nobodyさん
2011/01/14(金) 16:22:34ID:???if (MDB2::isStatement($stms)) {
echo "実行ok";
}
else if (MDB2::isError($stms)) {
echo "error";var_dump($stms->getMessage());exit;
}
else {
echo "その他";
exit;
}
echo "テスト出力B";
0623nobodyさん
2011/01/14(金) 16:31:27ID:x5/cEkaGやってみました。
しかし、prepareをやっている行から下にある
echoはどれも表示されません。
prepare行の所でプログラムが強制終了しているのでしょうか?
0624nobodyさん
2011/01/14(金) 17:00:22ID:???それはクエリーに問題があるからで、しかも失敗している部分はテーブルから先にある。
もしかして・・・こんなオチ?
SELECT * FROM USER_TBL WHERE USER_NO = '?'
0625nobodyさん
2011/01/14(金) 17:13:22ID:x5/cEkaG$stmsにオブジェクトがない事によって
それ以降のecho等も実行されないわけですか?
?に''をつけてみましたが同じ結果でした。
別のサイトで、PEAR::MDB2ではなくPEAR::DBを使っていたので
それを流用し、DBを使って同じようにprepareからexecuteを実行すると目的の結果が得られました。
>>605さんがおっしゃられているように、PEARが壊れている等でしょうか?
0626nobodyさん
2011/01/14(金) 17:37:36ID:???ならPEAR::MDB2のソースを追ってみればいい。
PEARが壊れている。XREA固有の何かがある。
等の環境問題なら自宅に別の環境を作ってみればいい。
0627nobodyさん
2011/01/14(金) 17:41:37ID:???ならprepareが失敗してるから>>605の言う壊れてる可能性もある
SQLを
SELECT * FROM USER_TBL WHERE USER_NO=?
と
SELECT * FROM USER_TBL WHERE USER_NO=:testdata
でやってみて
>>624
$stmtがオブジェクトじゃなくても>>622のコードは実行できる
但しprepareが正常に動作していたらな
0628nobodyさん
2011/01/14(金) 17:50:22ID:???$sql = "SELECT * FROM USER_TBL WHERE USER_NO = ?";
$stms = $this->db->prepare($sql,array('integer'));
if (MDB2::isStatement($stms)) {
echo "実行ok";
}
else if (MDB2::isError($stms)) {
echo "error";var_dump($stms->getMessage());exit;
}
else {
echo "その他";
exit;
}
echo "テスト出力B";
0629nobodyさん
2011/01/14(金) 17:53:13ID:N58y3KzQMySQLで取得したテーブルデータを格納した複数の配列の中の【一部の要素】でソートをしたいのですが、どうすればよいでしょうか?
なお各配列ごとに【一部の要素】の名前が違うので、どうしたものか困り果てております。
array ("data1",
array (a = aaa, b = bbb, c = 1)
array (a = aaa, b = bbb, c = 2)
array (a = aaa, b = bbb, c = 3)
)
array ("data2",
array (a = aaa, b = bbb, d = 4)
array (a = aaa, b = bbb, d = 5)
array (a = aaa, b = bbb, d = 6)
)
というような配列群が合って、その data1 の c と data2 の d を降順にソートして
最後に下のようにそのdata1とdata2を結合したdata3を作り出したいです。
array ("data3",
array (a = aaa, b = bbb, c = 1)
array (a = aaa, b = bbb, c = 2)
array (a = aaa, b = bbb, c = 3)
array (a = aaa, b = bbb, d = 4)
array (a = aaa, b = bbb, d = 5)
array (a = aaa, b = bbb, d = 6)
)
あまり基礎を分かっておりませんので、こんなこと自体ができるかどうかが不明ですが、よろしくお願いします。
0630nobodyさん
2011/01/14(金) 17:53:59ID:???0631nobodyさん
2011/01/14(金) 17:58:27ID:????がab'cdef
こうだろw
0632nobodyさん
2011/01/14(金) 18:01:33ID:x5/cEkaG>>628
3つのパターンを試しましたが全て結果は変わらずでした。
ただ、>>608さんのphp.iniの設定を間違っていました。
データベース接続成功とテスト出力Aの後に以下のエラーが出ています。
PHP Strict Standards: Non-static method MDB2::classExists() should not be called statically, assuming $this from incompatible context in /-省略-MDB2/MDB2.php on line 1854
Strict Standards: Non-static method MDB2::classExists() should not be called statically, assuming $this from incompatible context in /-省略-MDB2/MDB2.php on line 1854
PHP Strict Standards: Non-static method MDB2::fileExists() should not be called statically, assuming $this from incompatible context in /-省略-MDB2/MDB2.php on line 1854
Strict Standards: Non-static method MDB2::fileExists() should not be called statically, assuming $this from incompatible context in /-省略-MDB2/MDB2.php on line 1854
PHP Strict Standards: Non-static method MDB2::loadClass() should not be called statically, assuming $this from incompatible context in /-省略-MDB2/MDB2.php on line 1861
Strict Standards: Non-static method MDB2::loadClass() should not be called statically, assuming $this from incompatible context in /-省略-MDB2/MDB2.php on line 1861
PHP Strict Standards: Non-static method MDB2::classExists() should not be called statically, assuming $this from incompatible context in /-省略-MDB2/MDB2.php on line 327
Strict Standards: Non-static method MDB2::classExists() should not be called statically, assuming $this from incompatible context in /-省略-MDB2/MDB2.php on line 327
0634nobodyさん
2011/01/14(金) 18:08:08ID:???そのようになるようなクエリを書けば良いんじゃないの?
そのままやりたいならとりあえずarray_mergeでマージしてから
usortでC,Dの値を見る形で良いと思うが
0635nobodyさん
2011/01/14(金) 18:09:17ID:z4LQsmVn$stmt->bindParam(':foo', $foo);
$stmt->bindParam(':bar', $bar);
foreach($arr as $value){
list($foo, $bar) = $value;
$stmt->execute();
$stmt->closeCursor();
}
///////////////////////////////////////
foreach($arr as $value){
$stmt->bindValue(':foo', $value['foo']);
$stmt->bindValue(':bar', $value['bar']);
$stmt->execute();
$stmt->closeCursor();
}
0636nobodyさん
2011/01/14(金) 18:10:15ID:x5/cEkaG自分で入れてはないのですが
get_included_files()で確認したら
/usr/local/lib/php/MDB2/Driver/mysql.php
を読み込んでいるようですし
queryメソッドでは結果を取得できるので
大丈夫だという認識でした。
0637nobodyさん
2011/01/14(金) 18:15:30ID:N58y3KzQどのようにクエリを書けばいいか分からなかったので、いっそPHP側でできないものかと思いまして。
ちょっとその方法でやってみます。ありがとうございます。
0638nobodyさん
2011/01/14(金) 18:20:14ID:???これはどう?
$stms = $this->db->loadModule('Extended')->prepare($sql);
0639nobodyさん
2011/01/14(金) 18:28:15ID:x5/cEkaGFatal error: Call to undefined method MDB2_Extended::prepare()
というエラーが出ます。
0640nobodyさん
2011/01/14(金) 19:12:37ID:???これは?
$stms = $this->db->prepare($sql, NULL, MDB2_PREPARE_RESULT);
0641nobodyさん
2011/01/14(金) 19:23:25ID:x5/cEkaGありがとうございます。
693さんからレスを頂く前に動きました。
原因としては、XREAサーバーには既にMDB2がインストールされていたらしく
それを確認せずに自分でMDB2のパッケージをDLし、インストールしていました。
ソース上は自分でインストールした方を読み込んでいたらしく
そのパッケージを削除し、はじめからインストールされていたMDB2を
読み込みように変更したら正常に動きました。
ただ、なぜprepareだけ異常なのか、queryメソッド等は動くのかはわかりません。
朝早くからたくさんの方にレスを頂きました。
本当に助かりました。ありがとうございました。
0642nobodyさん
2011/01/14(金) 19:28:56ID:???まぁ解決してよかったね。
0643nobodyさん
2011/01/14(金) 19:34:06ID:???既に定義されていたらincludeできないから
その結論で完全解決ではないと思うぞ
0644nobodyさん
2011/01/14(金) 19:58:01ID:???解決して良かったです。
このスレで以前にありましたが、思いがけない仕様で皆様が開眼した事例がありました。
今回もそれに類するのだろうか? と、いろいろと自分でも試してみたりしていました。
それにしても環境に起因する事項だったんですね。
今回は、>> 643 さんが言われている、
「自分でダウンロード&インストールした方を使用した」部分の確定に課題が残りますが、
少しでも前に進める状況が得られたことは良いことです。
さて、お手数ですが残る課題として、>>643 さんが言われている部分を再整理して、
再度の質問として出してもらえませんか?
> 既に定義されているから include できない
それが覆された状況ですから、その部分を検証してみる必要があると思います。
0645nobodyさん
2011/01/14(金) 20:45:04ID:x5/cEkaG>>642
>>643
>>644
本当にありがとうございました。
心から感謝します。
少し状況を整理すると
XREAサーバー側にMDB2が入っていないと勝手に判断した後に
自分でダウンロードしたパッケージを解凍し、そのままサーバーへアップロードしました。
今までこの方法で、PEAR::NetUserAgentMobile等が正常に動いたので
それで問題ないと思っていたのですが
今調べて、このあたりを読むとそれだけではダメなんですかね?
http://m630.net/php-mysql/xreapearmdb2.html
正常にインストールが完了していないMDB2を無理やり読み込んでいたのが
おかしな挙動の原因でしょうか。
0646nobodyさん
2011/01/14(金) 20:48:19ID:???http://d.hatena.ne.jp/me0/20080320
0649nobodyさん
2011/01/15(土) 09:32:51ID:???0650nobodyさん
2011/01/15(土) 10:30:31ID:???0651nobodyさん
2011/01/15(土) 11:09:54ID:???言葉にするなら競合しただけ
0652nobodyさん
2011/01/15(土) 11:43:34ID:???■ このスレッドは過去ログ倉庫に格納されています