1 名前:● mailto:sage [2009/11/14(土) 17:31:22 ID:???] 質問者はまず>>1 を良く読むこと(必須!) 過去スレ、関連スレ、FAQなどは>>2-10 辺り 次スレは>>980 が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。 ◆前スレ 【PHP】下らねぇ質問はID出して書き込みやがれ 89 pc11.2ch.net/test/read.cgi/php/1255263534/ ◆質問用テンプレ 【OS名】vine linux 【PHPのバージョン】php5.26 【連携ソフトウェア】mysql 【質問内容】 ◆質問する時の注意 ・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す) ・ 己の行った操作、変更などを詳しく明記すること。 ・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。 ・ 質問者として、態度をわきまえること。 ・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。 (PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。) ◆質問後の注意 ・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。 ・解決しなくても回答をもらった場合はお礼を言うこと。 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。) ◆回答者への注意 ・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。 【その他諸注意】 ・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
2 名前:nobodyさん mailto:sage [2009/11/14(土) 17:31:42 ID:???] ■過去ログ 【PHP】下らねぇ質問はID出して書き込みやがれ 89 pc11.2ch.net/test/read.cgi/php/1255263534/ 【PHP】下らねぇ質問はID出して書き込みやがれ 88 pc11.2ch.net/test/read.cgi/php/1253061577/ 【PHP】下らねぇ質問はID出して書き込みやがれ 87 pc11.2ch.net/test/read.cgi/php/1251447028/ 【PHP】下らねぇ質問はID出して書き込みやがれ 86 pc11.2ch.net/test/read.cgi/php/1249042741/ 【PHP】下らねぇ質問はID出して書き込みやがれ 85 pc11.2ch.net/test/read.cgi/php/1245074032/ 【PHP】下らねぇ質問はID出して書き込みやがれ 84 pc11.2ch.net/test/read.cgi/php/1240835951/ 【PHP】下らねぇ質問はID出して書き込みやがれ 83 pc11.2ch.net/test/read.cgi/php/1238958898/ 【PHP】下らねぇ質問はID出して書き込みやがれ 82 pc11.2ch.net/test/read.cgi/php/1236532468/ 【PHP】下らねぇ質問はID出して書き込みやがれ 81 pc11.2ch.net/test/read.cgi/php/1234958956/ 【PHP】下らねぇ質問はID出して書き込みやがれ 80 pc11.2ch.net/test/read.cgi/php/1233479457/ 【PHP】下らねぇ質問はID出して書き込みやがれ 79 pc11.2ch.net/test/read.cgi/php/1231850905/ 【PHP】下らねぇ質問はID出して書き込みやがれ 78 pc11.2ch.net/test/read.cgi/php/1230026935/
3 名前:nobodyさん mailto:sage [2009/11/14(土) 17:31:51 ID:???] 関連リンク ■本家マニュアル www.php.net/manual/ja/ ■日本PHPユーザ会 www.php.gr.jp/ ■PEARマニュアル pear.php.net/manual/ja/ ■メーリングリスト ns1.php.gr.jp/mailman/listinfo/ ■ZFマニュアル framework.zend.com/manual/ja/ ■Smartyマニュアル www.smarty.net/manual/ja/ (以下英語) ■Zend本家 www.zend.com/ ■Zend Framework framework.zend.com/ ■php | architect www.phparch.com/ ■Smarty www.smarty.net ■Smartyマニュアル smarty.php.net/manual/en/ ■PECL本家(英語) pecl.php.net/
4 名前:nobodyさん mailto:sage [2009/11/14(土) 17:32:11 ID:???] 【簡易FAQ】 1.文字コードは何を使えばいいの? →1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。 2. このスレに書き込むときに自分のサイト名を晒したくない → example.com/ が例文などのために予約されている。hogehoge.comは使っちゃダメ。 3. ブラウザに何も表示されないんだけど・・・ → Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか? 4. 記号の意味がわからないけどググりようがない → 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、 「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較 5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった → {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする 6. 一定時間ごとに自動的に何かしたいんだけど → cronかタスクスケジューラを使え。 7.extractって危険なの? →変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。 8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい → URL呼び出しなら可能だけど、普通のファイル呼び出しではできません 9.include/requireでURLを指定しても何も起きない → .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
5 名前:nobodyさん mailto:sage [2009/11/14(土) 17:32:22 ID:???] 10. そもそもインストールの時点でうまくいかない → 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、 Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり 11. SQLの質問はどこで? → データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する 12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの? → ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。 13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい → 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター 14. echoとprintってどう違うの? → よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。 www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 15. クッキーの情報をユーザから隠したい → セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな 16. strip_tags()で削除しないタグを複数指定したい → strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし 17. CSVやTSVのファイルをスマートに扱いたい → まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。 18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い → C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする 参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと 19. ファイル入出力関数(fopen等)でリモートファイル(http://〜とか)を扱う際の限界 → fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決 必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる 20. PHPからPOSTリクエストしたい →19.を参照 21. 画像処理一般 or GDの限界 → ImageMagick(PECLのやつ or シェルから実行) 22. 画像・音・動画はファイルで保存?DBに保存? → 好きにしてください
6 名前:nobodyさん mailto:sage [2009/11/15(日) 16:44:09 ID:???] >>1 乙
7 名前:nobodyさん [2009/11/16(月) 11:03:50 ID:bvqRdc2u] ソフトバンクの「基礎からのMySQL」のP450のコードなのですが、 <?php /* データベースへ接続、データベース選択 */ $s=mysql_connect("localhost","root","1234") or die("失敗です"); mysql_select_db("db1",$s); /* NAMEがhのVALUEを変数$h_dに代入 */ $h_d=$_POST["h"]; /* $h_dがsel、ins、del、serのどれかで条件分岐 */ switch("$h_d"){ case "sel": $re=mysql_query("SELECT * FROM tbk ORDER BY bang"); break; case "ins": $a1_d=$_POST["a1"]; $a2_d= $_POST["a2"]; mysql_query("INSERT INTO tbk (nama,mess) VALUES ('$a1_d','$a2_d')"); $re=mysql_query("SELECT * FROM tbk ORDER BY bang"); break; case "del": $b1_d=$_POST["b1"]; mysql_query("DELETE FROM tbk WHERE bang=$b1_d"); $re=mysql_query("SELECT * FROM tbk ORDER BY bang"); break; case "ser": $c1_d=$_POST["c1"]; $re=mysql_query("SELECT * FROM tbk WHERE mess LIKE '%$c1_d%' ORDER BY bang"); break; }
8 名前:nobodyさん [2009/11/16(月) 11:04:58 ID:bvqRdc2u] /* クエリの結果を表示 */ while($kekka=mysql_fetch_array($re)){ print $kekka[0]; print " : "; print $kekka[1]; print " : "; print $kekka[2]; print "<BR>"; } /* データベース切断 */ mysql_close($s); /* トップページへのリンク */ print "<BR><A HREF='kantan2.html'>トップメニューに戻ります</A>"; ?> を実行すると、上手く動作しないだけか、 「 "; } /* データベース切断 */ mysql_close($s); /* トップページへのリンク */ print " トップメニューに戻ります"; ?> 」 とブラウザ上にphpファイルの内容が表示されてしまいます コレは何がおかしいのでしょうか? printの部分がおかしいのではないかと思うのですが・・・ 自分でも一応色々と書き直してみたのですが、改善されません
9 名前:nobodyさん mailto:sage [2009/11/16(月) 11:39:37 ID:???] PHPが動いてないような。 多分ブラウザでソースみるとまるまる見えてると思います。
10 名前:nobodyさん mailto:sage [2009/11/16(月) 11:44:45 ID:???] phpは動いてるけどapacheに関連付けられてないのかも
11 名前:8 mailto:sage [2009/11/16(月) 11:56:21 ID:???] >>9 他のサンプルコードは動いていました 似たようなコードを実行したときには、このようにphpの内容がブラウザに出力されていませんでした >>9 さんの言われているように、今FireBugでスクリプトを開いて見てみたところ、ソースが(<?php〜?>の中が)表示されていました localhost から出力したからなのか、自分には知識が乏しいので分かりませんが、こういう場合はどのようにすれば解消するのでしょうか? >>10 そうなのでしょうか よく分からないのですが、一応他のサンプルなどは動いています ただし、それらが動作するからといってApacheに関連付けられているのかは自分には分かっていないのですが・・・
12 名前:8 mailto:sage [2009/11/16(月) 12:05:29 ID:???] ごめんなさい、書き忘れました 結局この場合、上記のサンプルコードが間違っているのではなく、自分のPHP又はApacheの設定がおかしいという事なのでしょうか? 一応単純に <? php print "山田"; ?> と打つと、ブラウザには(localhostから出力していますが)山田と表示されます
13 名前:nobodyさん mailto:sage [2009/11/16(月) 13:17:29 ID:???] >>1
14 名前:8 mailto:sage [2009/11/16(月) 13:18:33 ID:???] 再びごめんなさい・・・。ありがとうございます、問題が解決しました。お騒がせしました
15 名前:nobodyさん mailto:sage [2009/11/16(月) 13:20:55 ID:???] はい?
16 名前:nobodyさん mailto:sage [2009/11/16(月) 13:32:47 ID:???] せめて何だったのか書いてくれるとあなたの書き込みが無駄にならずにすむ。
17 名前:8 [2009/11/16(月) 14:11:11 ID:bvqRdc2u] すみません、>>14 は自分ではありません・・・
18 名前:8 [2009/11/16(月) 14:29:25 ID:bvqRdc2u] 今コマンドプロンプトから構文エラーチェックをしてみたのですが、構文エラーなしと書かれていました う〜ん、なんでブラウザにprint後のコードが出力されるのでしょうか・・・?
19 名前:nobodyさん [2009/11/16(月) 14:56:43 ID:+MFbLdTc] phpスクリプトをシンボリックリンクで置くのはダメなんでしょうか? hoge.php はちゃんと動くんですが, 他の場所に hoge.php を置いてシンボリックリンクで参照すると 403 Forbidden になります. CentOS + lighttpd + php-cgi です.
20 名前:nobodyさん mailto:sage [2009/11/16(月) 15:14:29 ID:???] >>19 シンボリックリンク使える。 webサーバの設定でシンボリックリンクの許可をしておかないと駄目 lighttpdは使った事無いけど、 ググったらでてきた↓↓の設定はしてある? server.follow-symlink = "enable"
21 名前:nobodyさん mailto:sage [2009/11/16(月) 17:02:14 ID:???] >>18 ソースうp
22 名前:8 [2009/11/16(月) 17:32:02 ID:bvqRdc2u] >>21 >>7-8 にコードは書いております 構文チェックはphp -lで行いました
23 名前:nobodyさん mailto:sage [2009/11/16(月) 18:18:13 ID:???] データベースに「"」を含む項目あるか?
24 名前:nobodyさん mailto:sage [2009/11/16(月) 18:40:26 ID:???] いやだから.phpファイルがPHPに関連付けられてないからでしょ
25 名前:nobodyさん mailto:sage [2009/11/16(月) 18:55:01 ID:???] php そのファイル で動きますか? apacheとかIISは分かります?
26 名前:nobodyさん [2009/11/16(月) 20:34:49 ID:HkdbmVie] javascriptで、テキストボックスに文字列を追加していきたいんですがどうやったらいいでしょうか。 具体的には、1ページ内に、 ”明日””今日””昨日”のように複数の文字列の下に、追加ボタンをおいて、 押された順番に、例えば、 明日昨日今日と押したら、 明日 昨日 今日 となるように、 テキストボックスに改行しながら文字列を追加していくような感じのを作りたいんです。 よろしくお願いします<m(__)m>
27 名前:nobodyさん [2009/11/16(月) 20:45:41 ID:HkdbmVie] すいませんこちらPHP専用のようでした 取り消してこちらに移動させてもらいます<m(__)m> △▲ WebProg 初心者の質問 Part21 ▼▽ pc11.2ch.net/test/read.cgi/php/1257701535/
28 名前:nobodyさん mailto:sage [2009/11/16(月) 22:35:06 ID:???] >>8 <?からBRの後の>がタグと解釈されてるだけ、だな。 ブラウザのソースの表示で見たら、全部見えるかも。
29 名前:nobodyさん mailto:sage [2009/11/16(月) 23:19:35 ID:???] cli版はモジュールとして動かすのと挙動が同じだと思ってるksな8
30 名前:nobodyさん [2009/11/16(月) 23:40:57 ID:DxyMrPHB] $a['test']['a1'] = 1; $a['test']['a2'] = 2; $b['test']['b3'] = 3; $b['test']['b4'] = 4; 上記のような配列があり、array_merge()的な手法で下記のように結合したいのですがどうすればいいでしょうか? $ab = array { ["test"]=> array { ["a1"] => 1 ["a2"] => 2 ["b3"] => 3 ["b4"] => 4 } } ちなみに、array_merge()では["test"]キーで上書きされてしまいます。 よろしくお願いします。
31 名前:nobodyさん mailto:sage [2009/11/16(月) 23:55:57 ID:???] >>30 惜しい array_merge_recursive()
32 名前:nobodyさん [2009/11/17(火) 00:02:14 ID:149D2nEE] >>31 うぉぉおおぉ! ありがとうございます!!
33 名前:nobodyさん mailto:sage [2009/11/17(火) 00:07:29 ID:???] $c = array_merge_recursive($a,$b);
34 名前:nobodyさん mailto:sage [2009/11/17(火) 10:32:58 ID:???] それphp5.3からじゃん ほんと使えねえksだな
35 名前:nobodyさん mailto:sage [2009/11/17(火) 11:03:39 ID:???] どこの誤爆かな?
36 名前:nobodyさん [2009/11/18(水) 03:36:08 ID:/HH3qrl4] PHP5.3の開発環境でデータベース接続に関してですが PEAR::DBとPEAR::MDB2とPDOの3つでテストしているのですが MySQLとPostgreSQLに関しては上記の3種類で問題なくselectを発行して結果が返ってくるのですが SQLite2のデータベースファイルに関してですがPDOでは問題ないのですが PEAR::DBとPEAR::MDB2で問題が発生しました。 それぞれ接続 $db = DB::connect('sqlite:///ファイル名'); $db = MDB2::connect('sqlite:///ファイル名'); って感じで書いています。 PEAR::DB用 $result = $db->query(SELECT文); while($row = $result->fetchRow(DB_FETCHMODE_ASSOC)){ print_r($row); echo "<br>"; } PEAR::MDB2用 $result = $db->query(SELECT文); while($row = $result->fetchRow(MDB2_FETCHMODE_ASSOC)){ print_r($row); echo "<br>"; } としてそれぞれ処理しているのですがループに一回も入らず終了してしまいます。 同じソースをPHP5.2.1の環境で使う場合は問題なく動きました。 MDB2のバージョンは2.4.1 MDB2_Driver_sqliteのバージョンは1.4.1を利用しています。 なにか対処の方法ってありますか?
37 名前:nobodyさん mailto:sage [2009/11/18(水) 03:49:00 ID:???] とりあえず変数の中身やPHPのエラーを表示させてみたら?
38 名前:nobodyさん [2009/11/18(水) 04:13:07 ID:/HH3qrl4] >>37 どうもです。とりあえず書き込みした後テストしてわかったのですが キモはdisconnectみたいです。 >>36 で書いた処理は大まかな処理で実際にはDB接続&SQL発行部分はクラス化していて 大まかな処理は(下記はPEAR::DB用でPEAR::MDB2利用時にはDBの部分をMDB2にしてある) $sql_UTF8 = "SET NAMES utf8"; $db = DB::connect($this->DB_connect); if (DB::isError( $db )) { die($db->getMessage()); } $res = $db->query($sql_UTF8); $result = $db->query($sql); if (DB::isError( $result )) { die($result->getMessage()); } $db->disconnect(); return $result; って感じの処理です。 PHP5.3環境においてSQLite利用時のみ$db->disconnect()の段階で取得していたSQLの結果を破棄してしまっているようです。 $db->disconnect();をコメントアウトしておくと取得できました。 PostgreSQLとMySQLは保持したまま。 また、PHP5.2.1環境下ではSQLite環境下でも$db->disconnect();しても値は残ったままのようです。 なにかしら対策の方法ってありますか? それとも俺の書き方自身に問題があるでしょうか?
39 名前:nobodyさん mailto:sage [2009/11/18(水) 07:17:47 ID:???] >>38 sqlite_close()の中で結果セットまで削除する仕様が原因だね MySQLではmysql_close()が呼ばれていても "mysql result"リソースのデストラクタが働くまでは参照可能 嘘言ってたら許してくれ まぁ実装に左右されたくなかったら 結果セットが必要なくなってから切断する設計にするべき
40 名前:nobodyさん [2009/11/18(水) 10:00:16 ID:xkg9vx1z] mysqlのpdoを使いたいのですがwindowsではどのようにしてインストールと設定を行うのでしょうか? php5.2.10です
41 名前:nobodyさん mailto:sage [2009/11/18(水) 10:52:23 ID:???] php.net/manual/ja/book.pdo.php 書いてあるよ
42 名前:nobodyさん [2009/11/18(水) 12:27:53 ID:/HH3qrl4] >>39 ありがとうございました。 >sqlite_close()の中で結果セットまで削除する仕様が原因だね PEAR::DBにしてもPEAR::MDB2にしても各DB関数のラッパーと考えると PHPのバージョンで>sqlite_close()の挙動が変わったと言うことですね。 >結果セットが必要なくなってから切断する設計にするべき さてこれどう実装したものか。 俺の実装の仕方が 1.PHPメイン ↓ 2.SQL文生成クラス ↓ 3.SQL送信クラス(>>38 はその一部) ってやり方やっているんだよね。 2.でメインのPHPから渡された引数を元にSQL文を生成して 3.で2.で生成されたSQL文をDBに接続してSQL発行してDB切断 で処理が2.に戻ってwhile($row = $result->fetchRow(DB_FETCHMODE_ASSOC)){でループさせて結果を取得 って一連の流れをどうにかしないとダメって事か?さてどう作り直したらいい事か?なんかアイディアありませんか?
43 名前:nobodyさん mailto:sage [2009/11/18(水) 12:29:21 ID:???] 普通はSQL発行するたびに接続と切断を繰り返したりしないかと
44 名前:nobodyさん [2009/11/18(水) 12:38:39 ID:/HH3qrl4] >>43 一回の処理でSQLが発行されるのは1回がほとんどだからこの様な実装方式にしています。
45 名前:nobodyさん mailto:sage [2009/11/18(水) 12:38:54 ID:???] そうですか
46 名前:nobodyさん mailto:sage [2009/11/18(水) 12:55:03 ID:???] DBから結果が返ったら、さっさと自分の側に取り込まないか? 取り込んどきゃ、ライブラリ側管理のデータがどうなろうが影響無いと思うんだが。 まあ、大抵ちょー大量に返ってくるというのなら、また違うかもしれん。
47 名前:nobodyさん mailto:sage [2009/11/18(水) 13:18:45 ID:???] >>46 だからその処理は2.のクラスでやっている。 で取得したDBのデータそのものを使うのは1.の部分。 ちなみに3.のクラスはSQL送信だけではなくて PEAR::DB、PEAR:MDB2、PDOのラッパー(実行環境によって使えるライブラリが変わったときにソースの修正をせずに済むようにするため) としてさらにはMySQL、PostgreSQL、SQLiteのラッパーとしての 役割を持たせた物。 だから下手に2.の部分と統合されられない。
48 名前:nobodyさん mailto:sage [2009/11/18(水) 13:23:33 ID:???] なんでSQL文生成クラスがバッファリングw DB駆動クラス(他から見れば、そいつがDBと言ってもいい)がやるならともかく。
49 名前:nobodyさん mailto:sage [2009/11/18(水) 13:38:27 ID:???] >>47 急に偉そうになったな ルールも守ってないし
50 名前:nobodyさん [2009/11/18(水) 13:45:40 ID:/HH3qrl4] >>48 SQL生成クラスって書き方したが 実際には ・SQLの生成 ・DB送信/管理クラスにSQLを送る ・結果セットからwhile($row = $result->fetchRow(DB_FETCHMODE_ASSOC)){でループさせて配列に格納。 ・配列をメイン処理に返す って感じの処理です。 さらにこの「SQL生成クラス」に関してですが一つだけではなくて2つあります。 一つはselect専用のDB検索用 もう一つはInsert/Update/Deleteを発行するDB操作用。 分けた理由は管理者画面においては両方を使うが 一般ユーザ利用の部分に必要なのはDB検索用の方だけだから ユーザ利用の方でバクなどでのセキュリティー対策として 一つにしておいてDB操作の処理のメソッドが万が一呼ばれることの内容にするため (自分がソース間違えて呼び出したりなどに対する自己防衛と) や一般ユーザ利用部分の軽量化のため。 >>49 >ルールも守ってないし 2chビューワでいつもの癖でsageのチェックボックスつけて送信してしまいました。
51 名前:nobodyさん mailto:sage [2009/11/18(水) 13:47:55 ID:???] >>50 >だからその処理は2.のクラスでやっている。 などと言ってるけどその設計から見直したら?っていう話なのでは? アドバイスしても「俺のクラスではこうなんだ」としか言われなかったら はいそうですかどうぞご自由にと何も言うことなくなる。
52 名前:nobodyさん [2009/11/18(水) 14:01:36 ID:/HH3qrl4] >>51 現状できあがったシステムで(今まではPEAR::DB+PostgreSQLの環境) PEAR::DB、PEAR::MDB2、PDOやMySQL、PostgreSQL、SQLiteなマルチな環境下で動くようにバージョンアップ作業していたときに ついでに5.3での挙動もチェックしちゃえってテストしていたときに発生した問題で 根本的な設計をし直したらシステム全体も書き換えになってしまうので最低限の変更でなんとかならないかと今回の質問をしたのです。 って内情まで説明しないとダメですか?
53 名前:nobodyさん mailto:sage [2009/11/18(水) 14:07:58 ID:???] あのね、自分の思ってることが言葉で説明しなくても自動的に他人に伝わることはありえないんだよ?
54 名前:nobodyさん mailto:sage [2009/11/18(水) 14:20:43 ID:???] ふむふむ、クラスの内部でちょこっとデータ保持するようにすると、 システム全体も書き換えになってしまう、と。 どんな作りやねんw まあそれでも、他者が作ったそういうものでも何とかしなきゃならん仕事での立場だとしたら、 もしそうならちょこっと同情はする。
55 名前:nobodyさん mailto:sage [2009/11/18(水) 14:22:49 ID:???] >>49 お前みたいな知識も無い素人PHP外野専門はROMってろ
56 名前:nobodyさん [2009/11/18(水) 14:38:02 ID:/HH3qrl4] >>54 >システム全体も書き換えになってしまう、と。 ごめん。書き方が変だった。 このシステム全体はSQL周りのクラスって事。 本来はSQL送信/管理しているクラスだけですませたかった。 SQL生成や取得した結果セット用のクラスは極力いじりたくなかった。 自分でも「SQL生成や取得した結果セット用」クラスまでいじるなら 「SQL送信/管理クラス」に今まで一つだったメソッドを ・接続メソッド ・SQL送信メソッド ・接続解除メソッド にわけて 「SQL生成や取得した結果セット用」内からは今までは一回だけメソッドを呼び出していたのを それぞれ上記のメソッドを順番で呼び出せば済むって事はわかってているんですよね。 それかPHP5.3利用時にはSQLite利用時はPDO限定にするかって事ですね。 後、今環境が無いのですが試せてないのですが 5.2.1ではsqlite_close()後も結果セットは保持されていますけど sqlite_close()の挙動ですがPHPも5.2.1ではテストしているけど5.2.1以降の5.2系では挙動って変わっていますか?
57 名前:nobodyさん [2009/11/18(水) 14:46:27 ID:xi1WciP2] GDを使って画像のサイズを取得しようとしています。 $images = getimagesize("localhost/images/logo.gif "); というURLだと取得できないのですが、 $images = getimagesize("www.google.co.jp/intl/ja_jp/images/logo.gif "); というGoogleのロゴのサイズを取得しようとしたら出来ました。 getimagesizeを使う場合、localhostからは取得できないのでしょうか? もし出来ない場合、どうやってローカルサーバの画像を参照すればいいのか 方法を教えていただければと思います。
58 名前:nobodyさん mailto:sage [2009/11/18(水) 14:49:42 ID:???] とりあえず、 ローカルPC上のブラウザから"localhost/images/logo.gif "が見えてるよね?
59 名前:57 [2009/11/18(水) 14:52:09 ID:xi1WciP2] はい。見えてます。
60 名前:nobodyさん [2009/11/18(水) 14:57:17 ID:/HH3qrl4] >>59 そのローカル環境のファイル壊れてないよね? 一応、>>57 のソースを元に $images = getimagesize("www.google.co.jp/intl/ja_jp/images/logo.gif "); print_r($images); echo "<br>\n"; $images2 = getimagesize("localhost/work/GD/logo.gif "); print_r($images2); ってソースを書いてテストしたけど問題なく取得できた。 ローカルでのlogo.gifはgoogleのロゴをそのまま保存して利用。 ちなみに $images = getimagesize("./logo.gif"); の様に相対パスで書いた場合はどうなる?
61 名前:nobodyさん mailto:sage [2009/11/18(水) 15:01:07 ID:???] なんか見落としてる予感だわな エラーメッセージは出ないのか
62 名前:57 [2009/11/18(水) 15:04:24 ID:xi1WciP2] >>60 相対パスや絶対パスだと普通に表示されます。 なぜかURLにするとずっと読み込み状態で、 停止してもエラーメッセージなどは出ません。 ローカルサーバがWindowsXPのApacheだからでしょうか?PHPは5.2.5です
63 名前:nobodyさん mailto:sage [2009/11/18(水) 15:15:31 ID:???] >>62 max_execution_timeやdefault_socket_timeoutの値を変えてエラーがどうなるか試してみたら?
64 名前:nobodyさん mailto:sage [2009/11/18(水) 15:18:25 ID:???] >>61 その場合、php.iniの中身も確認しないとダメかもね。 display_errorsやerror_reportingまわりがどうなっているか確認しないとダメかも。下手したら非表示になっていたりして (以前どこだったかな。レンタルサーバでこれのレベルが下げてあってエラーも警告も出なかったことある。) >>62 後、 header("Content-type: image/gif"); $filename = "localhost/work/GD/logo.gif "; $f = fopen($filename, "rb"); $buf = stream_get_contents($f); fclose($f); echo $buf; なソースを書いてphp側で画像取得できるのか? これすらNGだとPHPよりapache側の根本的な設定に問題がありそう。 >>60 は俺だけど今度は回答側に回ったのにsage付け忘れました。すみませんでした。
65 名前:57 [2009/11/18(水) 15:24:10 ID:xi1WciP2] みなさんありがとうございます。たぶん、サーバの設定の問題かも知れません。 先ほどサブのPCで同じ事をしたらサイズが取得できました。 php.iniの設定や>>64 さんが書かれている内容も参考にしてみます。
66 名前:nobodyさん [2009/11/18(水) 15:55:00 ID:jaz8gdLl] data.txtから最終行を読み込んで表示した後、 <br> その最終行をdata.txtから削除するにはどんな方法でやれば良いでしょうか?
67 名前:nobodyさん mailto:sage [2009/11/18(水) 16:00:18 ID:???] fileでよみこんでend使ってunsetして書き込み
68 名前:nobodyさん [2009/11/18(水) 16:29:22 ID:jaz8gdLl] >>67 ありがとうございます。
69 名前:39 mailto:sage [2009/11/18(水) 19:57:24 ID:???] >>56 確かに5.3で挙動が変わってるナー バッファリングした結果セットをでっちあげちまえばいいんだ class BufferedResult { private $buffer; public function __construct($result) { while ($row = $result->fetchRow()) { $this->buffer[] = $row; }} public function fetchRow($mode) { return array_shift($this->buffer); } public function fetchAll() { return array_splice($this->buffer, 0); } } こんなクラスを作ってこうだ + if (SQLite使用時 && version_compair(PHP_VERSION, '5.3') >= 0) { + $result = BufferedResult($result); + } $db->disconnect(); return $result;
70 名前:nobodyさん mailto:sage [2009/11/18(水) 20:36:09 ID:???] $resultは参照になってると思うが大丈夫かい?
71 名前:nobodyさん mailto:sage [2009/11/18(水) 20:36:48 ID:???] >>69 訳してくだはい
72 名前:nobodyさん mailto:sage [2009/11/18(水) 20:37:46 ID:???] >>71 え、何を?
73 名前:nobodyさん [2009/11/18(水) 21:20:51 ID:nmLyX5fb] HTML4.01とXHTML1.0のタイプ別にDTDから要素と属性を取得するプログラムって探してもなかったのですが需要がないのでしょうか? 自分も書いてみたもののスマートな感じではないので勉強のためにソースを探しています どなたかご存知の方いらっしゃいましたら教えてください
74 名前:nobodyさん mailto:sage [2009/11/18(水) 21:23:06 ID:???] 誰得?
75 名前:nobodyさん mailto:sage [2009/11/18(水) 21:35:27 ID:???] 何のためにそんなの作るの? IDEのコード補完で勝手にやってくれるでしょ
76 名前:nobodyさん [2009/11/18(水) 21:40:40 ID:/HH3qrl4] >>69 ありがとうございます。 書いていただいてソースを元に public function __construct($result,$Lib_Kind){ if($Lib_Kind==1){ while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) { $this->buffer[DB_FETCHMODE_ASSOC][] = $row; } while ($row = $result->fetchRow(DB_FETCHMODE_ORDERED)) { $this->buffer[DB_FETCHMODE_ORDERED][] = $row; } while ($row = $result->fetchRow(DB_FETCHMODE_OBJECT)) { $this->buffer[DB_FETCHMODE_OBJECT][] = $row; } }elseif($Lib_Kind==2){ while ($row = $result->fetchRow(MDB2_FETCHMODE_ASSOC)) { $this->buffer[MDB2_FETCHMODE_ASSOC][] = $row; } while ($row = $result->fetchRow(MDB2_FETCHMODE_ORDERED)) { $this->buffer[MDB2_FETCHMODE_ORDERED][] = $row; } while ($row = $result->fetchRow(MDB2_FETCHMODE_OBJECT)) { $this->buffer[MDB2_FETCHMODE_OBJECT][] = $row; } } } public function fetchRow($mode){ return array_shift($this->buffer[$mode]);} $Lib_Kindが1だったらPEAR::DB、2だったらPEAR::MDB2使用 とソース書き直してみました。
77 名前:nobodyさん [2009/11/18(水) 21:43:23 ID:/HH3qrl4] >>69 >確かに5.3で挙動が変わってるナー どうせやるなら他のDB系関数の挙動も変更すればいいのに それにしてもなんでこんな中途半端(SQLiteのみ)な仕様変更したんだろう?
78 名前:nobodyさん mailto:sage [2009/11/18(水) 21:47:22 ID:???] >>76 なんで全部fetchしてんの? あとfetchAllがあるよ
79 名前:nobodyさん mailto:sage [2009/11/18(水) 22:10:31 ID:???] >>78 とりあえずMDB2で説明すると pear.php.net/manual/ja/package.database.mdb2.intro-fetch.php while ($row = $result->fetchRow()) { だった場合拾う値はデフォルトである MDB2_FETCHMODE_ORDEREDのみの型。 MDB2_FETCHMODE_ASSOCやMDB2_FETCHMODE_OBJECT の値も別途取得する処理を書いておく必要がある。 ただしMDB2_FETCHMODE_OBJECTの書き方はオブジェクトとして取得するのでなんか変な気がする。
80 名前:nobodyさん mailto:sage [2009/11/18(水) 22:22:48 ID:???] >>75 >勝手にやってくれる? kwsk
81 名前:nobodyさん mailto:sage [2009/11/18(水) 23:08:03 ID:???] >>76 こういうコードがサーバー落とすんだなw
82 名前:nobodyさん mailto:sage [2009/11/18(水) 23:22:39 ID:???] >>81 だったら君はどんなコード書く? 元々SQLiteは大規模開発にはむかないDB。 そんなSQLite限定で利用すると考えればそんなに負荷がかかるかな?
83 名前:nobodyさん [2009/11/18(水) 23:27:05 ID:nmLyX5fb] >>75 strictで使える要素と属性、framesetで使える要素と属性・・・のように必要なものだけを取得するようなことをしてます 目的はdoctype別補完辞書作成の為なんです IDEは全て試したわけではありませんがaptanaとDreamweaverを試した限りではあるdoctyleに対応しない属性が出てきますし足りない属性も出てきます 反応良かったらコード公開するつもりでした 質問は締め切りROMに戻ります ますありがとうございました
84 名前:nobodyさん mailto:sage [2009/11/18(水) 23:44:48 ID:???] >$Lib_Kindが1だったらPEAR::DB、2だったらPEAR::MDB2使用 クラス使う意味が半分かそれ以上消えとるな。
85 名前:nobodyさん mailto:sage [2009/11/19(木) 00:01:54 ID:???] >>84 kwsk
86 名前:nobodyさん mailto:sage [2009/11/19(木) 00:29:52 ID:???] 20年ほど前の、プログラミング言語C++でもしっかり明記されとるわな。 switch〜caseは止めれって。(if〜elseifの羅列も同じこと) C++には相変わらずinterfaceは導入されて無い(よね?)けど、 それ以降出てきた言語たちにはinterfaceなんて有りがたいものが あるんだから、よりその言葉に従うのが楽だわな。
87 名前:nobodyさん mailto:sage [2009/11/19(木) 00:48:25 ID:???] >>86 でも、それってPHP5だけを考慮に入れた場合は良いけど、PHP4まで考慮に入れたシステムの場合NGでは? PHP4が、サポート終了ってなっているがPHP4系がいまだに使われているサーバなんて大量にまだあるからPHP4に対するプログラムの サポートってなかなか切れないよ。
88 名前:87 mailto:sage [2009/11/19(木) 01:03:22 ID:???] 追加。 今回のようなマルチな環境に対応させるくらいのシステムなんだから古いシステムも考慮した上での作りだと思うよ。 そもそも、新しいのだけを考慮しているシステムならPHP4どころかPEAR::DBもシステムから外すべき物。 pear.php.net/package/DB >This package has been superseded, but is still maintained for bugs and security fixes. Use MDB2 instead. ぶっちゃけな訳しかたすると「バグとセキュリティーのためにサポートは続くがMDB2って言う後継出ているからそっち使えよ。」 PEARはPHPで書かれたライブラリだから必ずしもpearコマンドでインストール必要もなく インストールされてないレンタルサーバでもアーカイブDLしてきてプログラムから呼び出すパスを、通せばいくらでも使える。 と言うわけで、プログラムの更新作業するのにDBは、「いらない子」。 MDB2とPDOをサポートするだけのプログラムにした方が良い。 PEAR::DB,PEAR::MDB2,PDOとサポートさせるプログラムを書いている奴が、PHP4のサポートをごっそりと打ち切ったプログラム書くのか?
89 名前:87 mailto:sage [2009/11/19(木) 01:27:04 ID:???] >>87 ,>88書いて気になったけどここ見ている人たちってDB関連は、 ・PEAR::DB ・PEAR::MDB2 ・PDO ・そんなものラッパ使わない。各DB関数直接使う どれが多い? それと ・必須環境はPHP5以降。PHP4は切り捨てた。 ・必須環境はPHP4以降。PHP4もサポートし続ける。 に関してもどうしている?
90 名前:nobodyさん mailto:sage [2009/11/19(木) 01:39:54 ID:???] ・PHP5or4のみでサポートされている関数は使わない ・せっかく専用の関数が有るのだからそれらを纏めて抽象化
91 名前:nobodyさん mailto:sage [2009/11/19(木) 01:57:50 ID:???] >>89 IDと元質問のレス番号出しなさい。
92 名前:nobodyさん mailto:sage [2009/11/19(木) 01:59:56 ID:???] >>79 >別途取得する処理を書いておく必要がある それがアホ設計だと言ってるんだがw デザインパターンとか知らんのかね
93 名前:nobodyさん [2009/11/19(木) 02:00:09 ID:7S9/ReIJ] >>86 教科書通りのお手本を書く場合ならそれでいいけど、interfaceの実装はPHP5から。 さて私はPHP4の動作を対象外にしてまでinterfaceを使うべきですか? PHP4を対象外にするならPHP5もPHP5.1から動作対象としてDBもPEAR::DBとPEAR::MDB2も切り捨ててより速度が出るPDOだけにしますよww
94 名前:nobodyさん mailto:sage [2009/11/19(木) 02:03:51 ID:???] そうしろよ
95 名前:nobodyさん [2009/11/19(木) 02:32:52 ID:7S9/ReIJ] >>92 デザインパターンの有効性って再利用時などに使いやすくなどだよね。 一時しのぎようのクラスにまでそのものが必要かどうかの天秤にかけると別にデザインパターンに 沿った作りにしないでもごり押しでソース書いておけばとりあえずはいいや。って結論になったアホな俺。 >>94 単純に切り捨てができれば苦労しない。
96 名前:nobodyさん mailto:sage [2009/11/19(木) 03:12:12 ID:???] 再利用だのそんな問題ではなく >>76 を見て何とも思わないん? まぁ書いた本人だから思わないんだろうけど、今後もプログラム書いていくなら もうちょっとここの人達の意見にも耳を傾けてみたほうが幸せになれるんじゃないかなと思う次第
97 名前:nobodyさん mailto:sage [2009/11/19(木) 03:41:33 ID:???] >>76 継承を覚えろ。