【PHP】下らねぇ質問はここに書き込みやがれ 30
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/10/05(木) 01:38:25ID:y1WWhz/pまず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0372nobodyさん
2006/10/13(金) 14:08:35ID:???0373nobodyさん
2006/10/13(金) 14:33:47ID:wYHWwd6xメールのほうは捨ててしまったのですが、恐らく↓の影響かと思います。
ttp://www.plala.or.jp/access/community/mailplus/smtp_auth.html
0374nobodyさん
2006/10/13(金) 14:45:50ID:???smtp認証はしゃべれないはず。
fsockopenでプロトコル手書きするか何か別の手を使うしかないと思う。
0375nobodyさん
2006/10/13(金) 14:58:01ID:???0376nobodyさん
2006/10/13(金) 15:12:22ID:???ありがとう。
0377nobodyさん
2006/10/13(金) 17:10:43ID:0s8cJuHn例に出ていたのですが、たとえば図書館の本検索システム。
これはデータベースでやってるところが大多数らしいのですが、データベースを使わずにやっても出来ると思うのですが、どうなのでしょうか?
件数が30万件とかものすごく多くなると速度に差がでてくるのでしょうか?
それともサーバーの負荷の問題でしょうか?
0378373
2006/10/13(金) 17:22:09ID:???全然詳しくないのでアレなんですが、メーラーの設定みたいに、
ポート25を587に変えるだけじゃダメなんですねぇ。
0381nobodyさん
2006/10/13(金) 18:13:07ID:???30万件のレコードから、検索や抽出、並べ替えなんかをするのを
がんばって作ってみな。
まあ、結果を得られる速度はDBに負けるだろ。
もし対等に渡り合えるのがかけてるんなら、DBを作れたって話だ。
0382nobodyさん
2006/10/13(金) 19:13:58ID:???件数が多い場合や複数条件の組み合わせでやっぱ速度に大きく差が出るね。
速度に差が付く理由の1番大きなところはインデックスの生成だから
そこを自作してやればDBと対等かそれ以上の速度を出すことは可能。
それ以外にもデータ更新時に破損しにくいとかの堅牢性やメンテのしやすさ
なんかも理由には挙がるけど、データがほとんど更新されない静的データなら
どっちでも大した問題にはならないと思う。
検索処理と並行して頻繁に更新されるデータならDBで作ってないとすごく怖い。
0383377
2006/10/13(金) 20:14:05ID:0s8cJuHn>>381
>>382
皆様ありがとうございます。 やはり速度がかなり違うのですね。
データが破損しにくいとは知りませんでした。 どっちにしろ手間かけるくらいならDB使ったほうがいいということですね。
ありがとうございました。
0384nobodyさん
2006/10/13(金) 20:25:25ID:???0385nobodyさん
2006/10/13(金) 20:46:39ID:jl8poghH画像を右クリックで保存等は出来ても構わないのですが、画像のパスだけは
隠しておきたいのです。
テストではGDを利用して出来たのですが、使うサーバはGDが使えないのです。。
宜しくお願いします。
0387nobodyさん
2006/10/13(金) 21:27:48ID:???0388nobodyさん
2006/10/13(金) 22:27:07ID:???/img/****.jpg だろうが、 /img.php?****.jpg だろうと
どっちにしても、画像のパスには違いないわけだが…
直リンク対策や、会員限定とかのためにPHPを通して表示したいって事?
何が目的なのか、良く判らないんだけど
0389nobodyさん
2006/10/13(金) 23:38:25ID:???http://hoge.com/?id=passwd
$id = "";
if(isset($_GET["id"])){ $id = $_GET["id"]; }
としてから受け取っているけど、これって正解ですか?
0390nobodyさん
2006/10/13(金) 23:49:32ID:???俺も初め385の意味がわからなかったが、387を読んで、画像のパスを隠すというのはおそらくサーバ上での絶対パスを隠すという意味ではないかと推測。
で、もしそうなら387でFA。
0392nobodyさん
2006/10/14(土) 00:18:04ID:???$arr = array("1"=>array("1"=>array("id"=>5,"gender"=>0,"age"=>14)
,"2"=>array("id"=>33,"gender"=>0,"age"=>23)
,"3"=>array("id"=>143,"gender"=>1,"age"=>43)));
これを
$ages=array(14,23,43);
に加工したいんですが、可能ですか?
0393nobodyさん
2006/10/14(土) 00:23:19ID:???phpのinsertでserialの項目を省略して記述したいのですが、省略すると追加できません。
試しにコマンドプロンプトで同じinsert文を記入するとなぜか追加できてしまいます。
『失敗したinsert文』--> insertからbbsidを省略しています
create table bbstable (
bbsid serial,
name text,
title text,
coment text,
updatetime text);
$sql = 'insert into bbstable (name, title, coment, updatetime) values (?, ?, ?, ?)';
$stmt = $dbh->prepare($sql);
$flag = $stmt->execute(array($name, $title, $coment, $updatetime));
『成功したinsert文』--> コマンドプロンプトで実行
insert into bbstable (name, title, coment, updatetime) values (1, 2, 3, 4);
↑これでbbsidに採番された値が入っています
調べると以下のような説明を行っているサイトがあったのですが、まずserial型のデータをselectで取得してから、insertを行っています。
せっかく自動採番の項目なのに変だと思っています。何か思い違いをしているのでしょうか?
『解説にあったサンプルPG』
CREATE TABLE person (
id SERIAL,
name TEXT
);
new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
0395nobodyさん
2006/10/14(土) 01:39:03ID:???$id = isset( $_GET['id'] ) ? $_GET['id'] : '';
0397nobodyさん
2006/10/14(土) 02:07:22ID:HT3mnicjクッキーの変数ごとに期限を設定できるんでしょうか?
すぐに消えるクッキーとずっと残るクッキーを同居できますか?
0398397
2006/10/14(土) 02:19:24ID:???0400nobodyさん
2006/10/14(土) 08:20:59ID:???いまどき count(ary)とかやって要素数得るのダセーとか思うんだけど・・・
0401nobodyさん
2006/10/14(土) 08:32:36ID:+DX4AjuZC++やJavaみたいにデフォでは満足なリスト機能を持たない言語なら
クラスで用意するのも分かるが、LispやPerlやPHPくらいになると
むしろクラスで処理するのがナンセンスに感じるけどね。
count($arr)だって実際はプロパティ値返すだけだし。
0403nobodyさん
2006/10/14(土) 09:01:08ID:???英数字だけをとりだしたいのですが、
いい方法はありますか?
はじめは以下のようにやっていたのですが、
文字の組み合わせによって余計な文字が出てくる場合があります。
preg_replace('/[^\w]/', '', $str);
mb_eregi_replace を使ってみたのですが、
使い方があっていないのかうまくいきません。
0404400
2006/10/14(土) 09:01:33ID:???あと文字列もクラスじゃない。
JavaやC#だったら、インテリセンスでメソッドが出てくるが、
PHPだとそうはいかない。それがだるい。
0406nobodyさん
2006/10/14(土) 09:12:30ID:???文字列をわざわざクラス化!?w
だったらC++やJavaで整数がなんでクラスじゃないのか説明してみなよ。
それはダサくないのかね?
0407400
2006/10/14(土) 09:17:31ID:???とにかくインテリセンスがきかんのがうざい。
インテリセンスでクラスのメソッド名が出てきたら、
だいたい該当するのはどれなのかわかる。
PHPは、いちいち調べるのがめんどい。
タイポする可能性も増える。
しかも型もコンパイルないからエラーにならんし。
つーか、こんな言語愛用してるのは糞だ。死ね!
0408385
2006/10/14(土) 09:18:49ID:53yXNDSa>>390さんの通り、サーバに置いてある画像の絶対パスは隠しておきたいのです。
headerのcontent-typeとreadfileでどのようにやるんでしょうか。
よろしければヒントお願いします。
0410nobodyさん
2006/10/14(土) 09:28:56ID:???お前がそう思ってるならそれでいい。
糞だと思うなら使わなきゃいいし、このスレを見る必要もない。
もう来るなよ。
0413400
2006/10/14(土) 09:47:59ID:???じゃあ、おめぇこそ説明しろ。
文字列や配列がクラスなら、整数もクラス化しておいてもいいんじゃないかという意味を。
てか、C#じゃ整数もクラスだがな。でも、実際四則演算ばかりだから意識もしない。
むしろJavaみたいにプリミティブ型とクラスで分かれてる方が、色々うざい。
0415nobodyさん
2006/10/14(土) 10:00:02ID:???ありがとう。
0416400
2006/10/14(土) 10:02:19ID:???俺の煽りも今ひとつだったし、そもそもみんなまだ寝てるか。
0417nobodyさん
2006/10/14(土) 10:15:23ID:lXZlr1go0418nobodyさん
2006/10/14(土) 10:59:38ID:???オブジェクトだと確かに便利だと思った
PHPユーザは純OOな言語もやっておくと
PHPの良さ/悪さに理解が深まると思う
ただPHPはスタートがOO言語じゃないし
もう全部関数でいいじゃんみたいな発想から
スタートしてるからこれOOじゃねーって言っても
根本の設計思想から違うから仕方がない
インテリセンスがきかないってのは
eclipseなりZSなりのIDE使えば問題なし
あとsplでArrayObjectもIteratorも一応ある
0419400
2006/10/14(土) 11:31:31ID:???もれが言いたかったのは、クラスだったらオブジェクト変数書いて、
その後に->って書いたらメソッドの候補が出てくるでしょ?
でもクラスじゃなかったら、そうはならないから、めんどいってこと。
PHPの良いとこは、O/Rマッパー作らんで良いことかな。
selectの結果が連想配列で返ってくるのは便利。
型もないから、いらんこと気にしなくて良い。
0420nobodyさん
2006/10/14(土) 12:12:02ID:???マジやん
おお、
0421nobodyさん
2006/10/14(土) 13:06:48ID:???演算子が使えないけどな!
0422nobodyさん
2006/10/14(土) 13:07:22ID:???0424nobodyさん
2006/10/14(土) 13:15:25ID:mRs0+tI4SESSIONとしてObjectをキープしたいときって、session_startの前に
そのObjectが書かれたファイルをincludeすればいいのはわかってたんだけど、
そのObject内部にある入れ子のObjectってSESSIONとして保存されてないの??
今そんなプログラムを作ってて、Object経由で入れ子のObjectの関数呼び出したんだけど、
Call to a member function searchPage() on a non-object
とのこと。
原因または対策のわかる方いらっしゃったら教えてください
0425nobodyさん
2006/10/14(土) 13:23:45ID:???そのObjectに格納されてるObjectってのが、実体じゃなくリファレンスを格納してるんなら
当然のようにセッションには記録されないと思います。
リファレンスの本体はデータの外部にあるわけですから。
で、多くの場合、そういう構成になってるのではないでしょうか。
何とかして実体も一緒にセッションに格納されるようにすれば解決するんじゃないのかなぁ。
0427nobodyさん
2006/10/14(土) 13:43:45ID:mRs0+tI4でも実態を入れてるつもりなんですが・・・
object内部のfunctionで
function detail($post){
switch($post['dType']){
case 1:
$this -> DetailChartObjArr['a'] -> searchPage($a,$b);
break;
default:
$this -> DetailChartObjArr['a'] = new DetailChartObj();
break;
}
って感じのを作ってて、defaultのすぐ後にprint_rすると、DetailChartObjArr['a']は表示されるんだけど
case 1のあとにprint_rさせても何も表示されないし・・・
どうして?
0428nobodyさん
2006/10/14(土) 14:04:52ID:???0429nobodyさん
2006/10/14(土) 14:09:24ID:mRs0+tI4でそのオブジェクトにはsearchPageというfuctionがあってそれを実行させてる。
0430nobodyさん
2006/10/14(土) 14:25:01ID:???case 1の時にDetailChartObjArr['a']に
中身があるのは保証されているのかよくわからんし
0431nobodyさん
2006/10/14(土) 14:39:10ID:mRs0+tI4一応defaultのときにnewでObjectが作成されていて、
case 1でそのObject内部のFunctionが実行されてるってことは、
表現できてると思ったんだけど。
その保証されてるか否かってのが、何か気になる。
ひょっとしたらそこにオレの問題点が有るってことかな?
0432431
2006/10/14(土) 14:49:59ID:mRs0+tI4DetailChartObjArrの属性をpublicにしてSESSIONを出力してみたら、
とりあえず保存はされてるみたい。
他に何か原因が有るか考えてみます。
お騒がせしました
0433nobodyさん
2006/10/14(土) 15:25:49ID:???そのつくりだと、必ずdefaultがcase 1のまえに実行されるようには見えないから、
>中身があるのは保証されているのかよくわからんし
ということになる。
つくりを見直したほうがいい。
0434nobodyさん
2006/10/14(土) 16:08:25ID:???ログインシステムで、一人しかログイン出来ないように
ログインの重複を拒否したいんですが、どうプログラムを書けばいいんでしょうか?
0435nobodyさん
2006/10/14(土) 16:24:35ID:???ログイン処理
$logged=true;
}
0436nobodyさん
2006/10/14(土) 17:37:45ID:???loggedという関数がある訳ではなくて、単に変数をフラグのように扱ってるんですよね?
PHPってユーザーの数だけスクリプトが動くから、それでは意味がないと思っていたんですが
PHPの変数ってサーバで共有でしたっけ・・・
0438nobodyさん
2006/10/14(土) 17:50:26ID:???0439nobodyさん
2006/10/14(土) 17:55:48ID:???0440nobodyさん
2006/10/14(土) 18:01:22ID:???ログイン時にフラグを上げ、ログアウト時にフラグを下げるんですよね?
ブラウザを落とされたときはどう判定すればいいんでしょうか・・・
JSを使えば出来そうな気がするんですが、
PHP単体ではサーバでひとつだけ動く変数やスクリプトを作る機能はないんでしょうか?
0441nobodyさん
2006/10/14(土) 18:15:04ID:???ログイン成功時にセッションを開始して
DBに書き込んで次からのログインを防いで
ログアウト時にDBのフラグを下げる。
ブラウザを落とされたときのためにタイムアウトを設定して
時間が経てば勝手にDBのフラグを下げるようにすればいいんですね
0442nobodyさん
2006/10/14(土) 18:15:41ID:???しかし、他のユーザーに「今ログインしてる人がいます」を返すポートが
別に必要になる罠。
0444nobodyさん
2006/10/14(土) 19:18:19ID:???どのようにやれば、いいのでしょうか?
preg_matchでやろうとしても、上手くできません。
どうか教えてください。
0445nobodyさん
2006/10/14(土) 19:28:10ID:???0448441
2006/10/14(土) 20:28:50ID:???タイムアウトまでログイン出来ない糞仕様なPHPが出来てしまいましたorz
ログイン人数を2人以上にしなければいいだけなので
ユーザーAがログインしてる時にユーザーBがログインした場合、
ユーザーBのログイン・ページ移動を許可、ユーザーAのログインを破棄
というように、後から入ってきたユーザーを優先させればいいと思ったんですが
この場合、DBのフラグをどう扱えばいいのかわかりませんorz
登録情報はユーザーAでもユーザーBでも同じですが
ログイン時にAとBで、それぞれ別々のIDか何かをセッションで持たせ、DBに格納し
ページを移動するたびにセッションとDBを確認するという方法を考えたんですが
この方法ではIDに乱数やホスト名を持たせても被ったりして困るのですが
後からログインしたユーザーを有効にする何かいい方法を教えてもらえないでしょうか?
0449nobodyさん
2006/10/14(土) 20:43:53ID:???DBに「ユーザAがログインしている」ってこと書いといて
適時それをチェックして
次に違うユーザが入ったらそれを上書きするって方法じゃだめなん?
0450nobodyさん
2006/10/14(土) 20:54:36ID:???0453nobodyさん
2006/10/14(土) 22:17:46ID:???ファイルロックされてたら、だれかログインしてると。
0455nobodyさん
2006/10/15(日) 01:50:31ID:hzF42wCh* @hoge hugahuga
*/
のコメントの書き方で、ファイルの作成開始日や、更新日は、
どのようなキーワードで書けばいいですか?
0456nobodyさん
2006/10/15(日) 01:53:37ID:???0457455
2006/10/15(日) 01:57:38ID:???0458nobodyさん
2006/10/15(日) 02:05:42ID:???author の検索結果のうち 日本語のページ 約 30,600,000 件中 1 - 100 件目 (0.26 秒)
autherで検索したら、辞典が3番目に出てきたからびびったぜ・・・
0459nobodyさん
2006/10/15(日) 02:10:59ID:???*File: window.C
*Auther: Akiko Wada
*Date: 1999/12/31
*EndHeader:
とかでいいんじゃね?
きまりなどない
0460nobodyさん
2006/10/15(日) 03:31:19ID:???ドキュメントの自動生成にどのツールを使うのかによる。
phpDocumentorを使うなら、該当するマニュアルを読むべし。
documentable elementでぐぐれ。
ちなみにファイル作成/更新時刻なんて手書きで書かないでしょ。
そういうのはCVSやSVNなどでキーワードをつけとく。
0461455
2006/10/15(日) 03:56:05ID:???更新日は手ではあまり書かないですが、
作成開始日は書いておくと、わかりやすかったりするんです。
authorは今気付いてよかった。
0462nobodyさん
2006/10/15(日) 04:48:19ID:???調べてから来いよ。
決まった書き方なんて特にないし、使うツールまたはローカルルール依存。
だいたいコメントなんだから好きなこと書いときゃいいんだよ。
ついでに言っておくと、ファイル作成日時なんて普通は誰も書かないから、完全に好きにしろとしか言いようがない。
0463nobodyさん
2006/10/15(日) 05:08:51ID:???0464nobodyさん
2006/10/15(日) 05:37:26ID:???0465nobodyさん
2006/10/15(日) 05:53:03ID:???作成日→created
更新日→modified
だろうけど、 >>460のいうとおり、svnなりcvsなりを使ってりゃ手で書く用事はないかなあ
0466441
2006/10/15(日) 11:00:23ID:???ユーザーAもユーザーBもログインした端末が違うだけで(仮想化された場合は端末も同じ)
実際は同一人物なので何を持たせればいいのか困ってます。
>>450
ショッピングカートのようなデータの競合が起こらない為の処置なので
誰かに入られるのを防ぐのではなく、
ログインユーザーが2人以上になることのみを防ぐ目的です。
それと、ブラウザを即落とした場合
タイムアウトまで待たないといけないという糞仕様を回避するためでもあります
後からログインしたユーザーをログイン状態にして
すでにログイン状態のユーザーのログインを解除する方法は
ログインごとに連番を付けるとかしかないんでしょうか…
それだとPHPが多重起動したときにすごく不具合が起こりそうで。。
0467nobodyさん
2006/10/15(日) 11:28:41ID:???それとも別アカウントの話か?
0468nobodyさん
2006/10/15(日) 11:35:39ID:???0469nobodyさん
2006/10/15(日) 11:39:38ID:???> ログインユーザーが2人以上になることのみを防ぐ目的です。
だから別アカウントの話でしょ。
誰か1人がログインしてたら他は一切ログインできない糞仕様サイト。
■ このスレッドは過去ログ倉庫に格納されています