【PHP】下らねぇ質問はここに書き込みやがれ 50
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/07/11(水) 17:50:01ID:fYd+34USPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 49
http://pc11.2ch.net/test/read.cgi/php/1182794620/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0015nobodyさん
2007/07/12(木) 11:08:22ID:???session_unsetは、全てのセッションファイルを削除する。
そもそもセッションは、セッションファイルをサーバー側に作って、
ファイルによってセッションを管理しているが、session_unsetを実行すると、
セッションファイルを作るフォルダが全て消去される。
つまり、セッションが現在繋がっているユーザーのセッション情報が全て廃棄されるので
普通は使わない。
特定のユーザーだけのセッション情報を破棄したいのなら、
セッション名を指定して廃棄するしかない。
0016nobodyさん
2007/07/12(木) 11:12:54ID:???001712
2007/07/12(木) 11:26:30ID:uQiGe5BLクッキーからセッションID引っこ抜いて破棄するように
組み替えた
とりあえずこれで症状が出ないかしばらく様子をみます
ありがとう
0018nobodyさん
2007/07/12(木) 11:47:21ID:???0019nobodyさん
2007/07/12(木) 13:39:43ID:???ログアウトとかでセッションをリセットする場合って普通は
$_SESSION = array();
ってやんないか?
0020nobodyさん
2007/07/12(木) 13:54:07ID:???0021nobodyさん
2007/07/12(木) 14:10:32ID:???002312
2007/07/12(木) 14:15:25ID:???鵜呑みにはしていないので…
ちなみにマニュアルに載ってる以下の方法で組みなおしてある
15がヒントになったのは確かので感謝はしてる
// セッション変数を全て解除する
$_SESSION = array();
// セッションを切断するにはセッションクッキーも削除する。
// Note: セッション情報だけでなくセッションを破壊する。
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
// 最終的に、セッションを破壊する
session_destroy();
0024nobodyさん
2007/07/12(木) 14:19:30ID:???>マニュアルも読みましたが現在登録されている全ての
>セッション変数を開放します。
>としかなく全てというのが何処まで影響力を持つのかがわかりません
まあ、とりあえずマニュアルに付帯しているUser Contributed Notesぐらいは読もうね。
0025nobodyさん
2007/07/12(木) 14:24:40ID:???0028nobodyさん
2007/07/12(木) 14:28:41ID:???0029nobodyさん
2007/07/12(木) 14:52:58ID:cyViohryauの2GだったらCDMAとか・・・。
携帯のキャリア&2Gor3Gを取得したいのですが、何かお勧めの方法などがあれば教えてください。
0030nobodyさん
2007/07/12(木) 14:58:02ID:???キャリアはUAで解ると思う
通信方式はキツイ、別にサーバーまでその方式で通信してきている訳じゃないし、機種から判断するぐらいしか無いんじゃないかな
0031nobodyさん
2007/07/12(木) 15:00:53ID:cyViohryなるほど。ありがとうございます。
リモートホストでキャリアを判別して、
UAで機種を振り分けですね。
0032nobodyさん
2007/07/12(木) 15:02:00ID:???それってどこかに解説ある?
http://itpro.nikkeibp.co.jp/article/COLUMN/20050917/221333/?ST=oss&P=2
ここ見てもキャッシュ・フィルタ・名前空間くらいしか書かれてないんだけど
クエリ自動生成とか興味あるから使ってみたい
0033nobodyさん
2007/07/12(木) 15:50:00ID:???や、UAで機種がわかればそっからキャリアも解るでしょ?
確かにリモホでやった方が楽だけど、どの道UAで振り分けるんだからいっぺんにやっちゃった方がリモホ分の労力浮くと思うよ
0034nobodyさん
2007/07/12(木) 15:55:40ID:???0035nobodyさん
2007/07/12(木) 16:00:17ID:cyViohry>>34さんの仰るとおり、偽装PCを弾きたいのです。
携帯サイトは完全3Gのみ対応のサイトにしたいので、2Gも弾きたいです。
0036nobodyさん
2007/07/12(木) 16:03:54ID:???PCでケータイ用の画面見られることに不都合ってあるの?
IPの帯域でケータイUAを弾くと、Yahooやgoogleのケータイ用のrobotが偽装するUAも弾くことになるから、
検索エンジン経由でケータイサイトに来る人がいなくなるよ。
0037nobodyさん
2007/07/12(木) 16:34:10ID:???自作のプログラム配布している人は逆コンパイルされたら困るし、
クライアント様は検索エンジンなんて二の次だし、
そもそも検索の下位のサイトは検索エンジンの価値がないし
0039nobodyさん
2007/07/12(木) 17:51:32ID:???セッション使うより
会員制サイトならユニークIDにしたほうが効率よくない?
セッションだと
セッション→ID&PASS→DBより一致するデータを取得
ユニークIDだと
ユニークID→一致するデータを取得
GETにでも入れておけばいいんじゃね?
0040nobodyさん
2007/07/12(木) 17:59:35ID:???0042nobodyさん
2007/07/12(木) 18:03:50ID:???0043nobodyさん
2007/07/12(木) 18:10:11ID:???どこがじゃねーだろオマエ!!
GETにしたら、そこから他のホームページに跳んだときに、
リファラーで、セッションを簡単に盗まれるだろうww
オマエのHPはそんなアホな設計してんのか?
0044nobodyさん
2007/07/12(木) 18:16:24ID:???その設計だと某アホーの子会社のように
クレジット番号入りの書き込みをされたお問合せ内容
を全部みられてあせらなければならなくなるぞ
0047nobodyさん
2007/07/12(木) 18:25:38ID:???>リンク先とのページの間にime.muみたいにページ挟めばいいだけじゃね?
そんなめんどいサイト使いたくないな
0049nobodyさん
2007/07/12(木) 18:32:08ID:???各画面でログインしてる人のニックネームとか表示するときに毎回DBにアクセスするのか?
0052nobodyさん
2007/07/12(木) 18:53:00ID:???0054nobodyさん
2007/07/12(木) 19:10:00ID:???0055nobodyさん
2007/07/12(木) 19:26:00ID:???0056nobodyさん
2007/07/12(木) 19:42:13ID:lBVkotIg0057nobodyさん
2007/07/12(木) 19:46:51ID:???http://www.php.net/manual/ja/
0058nobodyさん
2007/07/12(木) 19:51:07ID:???0059nobodyさん
2007/07/12(木) 21:02:26ID:???0061nobodyさん
2007/07/12(木) 21:14:44ID:xgT4qcJehttp://news22.2ch.net/test/read.cgi/newsplus/1184227903/l50
0062nobodyさん
2007/07/12(木) 22:02:54ID:???プログラマのためのSQL ジョー セルコ
SQLポケットリファレンス 朝井 淳
自分の使うDBの中級者本
あとphpの環境ぐらい書いとけ
0063nobodyさん
2007/07/12(木) 22:25:02ID:???もっとマシな紹介しろよ。
0064nobodyさん
2007/07/12(木) 22:36:23ID:???文字数が多いだけで普通に初歩本だと思うけど
つかコレが読めないような方は値段見た時点で買わないと思う
つかそう思うならオススメあげとけよw
0065nobodyさん
2007/07/12(木) 23:04:18ID:v1n4UJF6あるサイトにアクセスして、一定時間表示されなければ、その処理は中断する。
fopenでURLを開くと同時に開始時間をスタートさせ、
一定時間経っても何らかの情報が取得出来ない場合は、次のURLを読み込む
というやり方で出来る気がしますが、まだ空想の段階です。
もし、出来そうならヒントとなる関数や組み立て方を教えて下さい。
0066nobodyさん
2007/07/12(木) 23:08:38ID:???stream_set_timeout
でできるよ。
メールサーバからの大量受信とかもこれでリトライとか、あきらめて次の処理とか出来る。
0069nobodyさん
2007/07/12(木) 23:58:27ID:2QVskV9M68 名前:nobodyさん[sage] 投稿日:2007/07/12(木) 23:12:54 ID:???
>>64
「w」頭悪そうだね。
ま、悪いんだろうけど。
0070nobodyさん
2007/07/13(金) 00:08:35ID:r6mqeqmj69 :nobodyさん:2007/07/12(木) 23:58:27 ID:2QVskV9M
バカ皿仕上げ
68 名前:nobodyさん[sage] 投稿日:2007/07/12(木) 23:12:54 ID:???
>>64
「w」頭悪そうだね。
ま、悪いんだろうけど。
0071nobodyさん
2007/07/13(金) 01:35:56ID:???出力する方法って無いですかね?print_rやvar_dumpでもなく。
0072nobodyさん
2007/07/13(金) 01:48:48ID:???0073nobodyさん
2007/07/13(金) 05:18:35ID:zCZ7I7UC書き込むときにクッキーが使えないと書けない仕様ですが、
クッキーを消しても時間規制にひっかかってしまいます。
そこでこのような2ちゃんの使用を勉強したいのですが、
クッキー以外にどこに記録がのこっているのでしょうか?
0074nobodyさん
2007/07/13(金) 05:30:10ID:???0076nobodyさん
2007/07/13(金) 06:57:24ID:zCZ7I7UCということは、サーバに記録をのこしておけばクッキーが消されても規制できるということですね。
セッションを使えば同じことできますか?
0077nobodyさん
2007/07/13(金) 07:03:19ID:???2chみたいな大規模な所は知らないけど、最近投稿したipを記録しておけば十分でしょう
0078nobodyさん
2007/07/13(金) 08:20:18ID:zCZ7I7UC0079nobodyさん
2007/07/13(金) 08:39:36ID:???ここに書いてもいいのかな
0080nobodyさん
2007/07/13(金) 08:44:40ID:???例えば、以下のようなテーブルを作成すればできる
TBL_POST_IP
POST_DATE TIME_STAMP
IP_ADDRESS VARCHAR(15)
PRIMARY KEY をIP_ADDRESSに付ける
接続されたら
SELECT MAX(POST_DATE) MAX_POST_DATE FROM TBL_POST_IP WHERER IP_ADDRESS = '$_SERVER['REMOTE_HOST']'
MAX_POST_DATEが現在日時よりも一定時間経過していなければ
header("Location: http://www.yahoo.co.jp/");
exit;
問題がなければ、
INSERT INTO TBL_POST_IP VALUES(NOW(), '$_SERVER['REMOTE_HOST']');
を実行すればよい。
008180
2007/07/13(金) 08:51:02ID:???cronなどで適時消す必要がある。
例えば、一日ごとに、
DELETE FROM TBL_POST_IP WHERE TO_DAYS(POST_DATE) < TO_DAYS(NOW())
を実行すれば、昨日分のデータを全て消えるし、
毎日のデータ量もそれほど行かないと思う。
又は、このデータは永続的に保存しておきたいのなら、
INSERT INTO BACK_UP_TABLE SELECT * FROM TBL_POST_IP
とすればいい。
0082nobodyさん
2007/07/13(金) 08:54:15ID:???しかもIPだと同じ会社で他のやつが書き込みしたら、いきなり書き込み制限されそう
008380
2007/07/13(金) 08:55:25ID:???最後に書いたBACK_UP_TABLEのデータ構造だけど、
TBL_POST_IPと一緒にしておくことを忘れずに。
あとは、一回毎のアクセスの旅にTABLEにアクセスして
パフォーマンス劣化が心配であれば、
TABLEを作る際に、MOMORYテーブルにすればかなり高速で検索できるよ。
MOMORYテーブルは簡単にいうと、メモリ上に情報を格納するテーブルを作成するオプション。
HDDアクセスと比べてかなり高速。
やり方は簡単で、テーブルをCREATEする際に
最後に
ENGINE = MEMORY;
をつければOK。
008480
2007/07/13(金) 08:59:49ID:???ごめん、確かにそうだ。
INSERT INTO TBL_POST_IP VALUES(NOW(), '$_SERVER['REMOTE_HOST']');
↓
REPLACE INTO TBL_POST_IP VALUES(NOW(), '$_SERVER['REMOTE_HOST']');
にすればOKだ。
あとは、IPがいやなら、IPアドレスの代わりにMACアドレスをキーにすれば、
PCそのものを特定できる。
0085nobodyさん
2007/07/13(金) 09:06:16ID:???0086nobodyさん
2007/07/13(金) 09:23:47ID:???http://pc11.2ch.net/test/read.cgi/php/1122899232/
0087nobodyさん
2007/07/13(金) 11:16:34ID:???0088nobodyさん
2007/07/13(金) 11:42:22ID:HPPLyHwMコンテンツが多くなる毎に、そのファイル無いの桁数も多くなります。
こういう場合、やっぱりコンテンツに応じて使用する関数ファイルを分けた方が
処理も早く、修正しやすいのでしょうか?
それとも、用途(フォーム入力時、確認時 など)によって分けた方がいいのでしょうか?
細かい点ですが、気になったので質問しました。
008980
2007/07/13(金) 11:51:59ID:???入力チェックは大きく分けて、
存在チェック、
必須チェック、
型チェック、
文字長さチェック、
範囲チェック、
関連性チェックに分けられる。
それぞれごとに関数を定義したら、あとのフォーム毎に変わる部分は引数として指定して、
汎用的な作りにすればいい。
それでもファイル内の関数が大きくなるのなら、
ファイルを分割して__autoを使って動的に呼び出せば、
パフォーマンスは良くなる。
009088
2007/07/13(金) 12:04:44ID:???>パフォーマンスは良くなる。
この部分がよくわからないのですが、
フォームを使う部分は、form_func.phpをincludeし、
表示・確認時は、disolay_func.phpをincludeする
という考え方ではないのでしょうか?
009280
2007/07/13(金) 12:16:46ID:???分かりにくくてすみません。
一つずつ説明すると、
存在チェックというのは、
例えば、名前が来るはずなのに$_POST["NAME"]がinnsetがFALSEで帰ってくるかどうかです。
本来フォームで定義しているのに、キーが来ないというのは偽装されている可能性があるため、
即アクセス拒否する必要があります。
次に、型チェックですが、
例えば、名前は全角、郵便番号は数値型、などです。
予め、型が決まっている場合に、入力チェックで弾く場合に使います。
型が違う場合には、通常入浴画面に戻して再入力させます。
次に、文字長さチェックは、
例えば、郵便番号は7桁、年齢は3桁、などのように文字の長さが決まっている場合に使います。
文字長さチェックに引っかかった場合には、型チェックエラーと同じ動作をさせます。
範囲チェックは、
例えば、年齢は0〜120歳とか、生年月日の年が1900年から2007年までというように、
数値の場合に範囲が決まっている場合です。
これも、エラー時の処理は型チェックエラーの場合と同様です。
関連性チェックは、住所で字が入力されいる時に町名が入力されていないなどのように
異なる項目が関連している場合に、その関連性の妥当性をチェックする方法です。
関連性チェックでエラーになった場合には、悪戯で有る可能性があるので、
警告画面を出す必要があります。
長文になりましたが、ざっくり言うとこんなところです。
分かりにくいところがあったら、また投稿して下さい。
009380
2007/07/13(金) 12:19:15ID:???必須チェックの説明を忘れていました。
必須チェックというのは、名前や住所など必ず入力しなければいけない項目が
未入力かいなかをチェックする方法です。
存在チェックとちがうのは、必須チェックはクエリーにキーがあるが、値がないかどうかをチェックするのに対して、
存在チェックは、クエリーにキーがあるかどうかをチェックする方法です。
009488
2007/07/13(金) 12:28:29ID:???せっかく書いていただいたのに申し訳ないのですが、
そういう記述を書いている関数のセットがあるわけです。
それを「フォーム処理用」としてまとめています。
それとは別に表示用の関するがありまして、
例えば、$sexが1なら「男」 $sexが2なら「女」という値を返す関数を作っているわけです。
ただそういう処理をひとつのファイル上でまとめていると、
後から確認した時にわかりづらいのではないか?っと思い、
「皆さんはどうしてますか?」っと質問した次第です。
0095nobodyさん
2007/07/13(金) 12:46:11ID:???class Constants{
static $sexArray = array( '1' => '男', '2' => '女' );
}
<td>性別</td><td><?=Constants::sexArray[$_POST['sex']]?></td>
0097nobodyさん
2007/07/13(金) 14:54:12ID:FLkffxf0以前に使っていたIDはどうなるのでしょうか?
もしサーバーに残るのでしたら、容量を抑えるために消したいのですが可能でしょうか?
0099nobodyさん
2007/07/13(金) 16:23:41ID:???0100sage
2007/07/13(金) 16:28:08ID:???0101nobodyさん
2007/07/13(金) 16:36:25ID:???0102nobodyさん
2007/07/13(金) 17:00:23ID:dloI7Add↑みたいに、受け取った文章の特定の文字(一定の規則性を持った文字)
を装飾する(タグを付加して表示する)のってどうやるんでしょうか?
「pregなんかの正規表現で切り取って、タグで囲んでもとの位置に戻す」
という作業だと思うんですが、
一番スマートな方法を教えてください。
できれば具体例を示してもらえるとありがたいです。
0103nobodyさん
2007/07/13(金) 17:01:32ID:???>>(\d{1,4})
<a href="">\1</a>
0104nobodyさん
2007/07/13(金) 17:05:51ID:7syhWac6現状ログインユーザーがページを読み込む毎に
クエリが5本走るようになってます。
まだ追加したい機能があるので将来的には7〜8本は
クエリが走るようになると思うのですが
これって公開した暁にはどの程度の負荷になるのでしょうか?
仮に負荷が大きすぎて実用でないとしたら
どうすればよいでしょうか?
ストアドプロシージャの使用で負荷軽減になりますか?
javascriptのonloadで別に呼ぶのはページ表示を速くする効果がありますか?
0105nobodyさん
2007/07/13(金) 17:10:07ID:???0106nobodyさん
2007/07/13(金) 17:21:08ID:???ページがあるけど、0.2秒から0.3秒程度で返却しているよ。
indexをうまく張れば、1000万件超えても余裕だよ。テストデータでのテスト済み。
0107nobodyさん
2007/07/13(金) 17:21:38ID:NLrIBmGt>>105に同意
あとで組み替えられるように粗な作りにしておけばOK、一発目で納得いくものはつくれんよ。
webサービスにやたらβが多いのも、あちこち試行錯誤、段階リリースやってるからだ。
あとは、本当にクエリが5本必要なのか?ってとこか。
0108104
2007/07/13(金) 17:26:34ID:7syhWac6レスありがとうございます。
とりあえず完成させて、テスト公開してみたいと思います。
0109nobodyさん
2007/07/13(金) 17:36:59ID:???余計時間かかって、苦労するな・・・
テーブルなんて細部に分けた方が扱いやすいんだけどな。
1画面1フォームの場合は、すべて1つのテーブルで済ませようと思ってしまう。
0110nobodyさん
2007/07/13(金) 17:38:56ID:???0111nobodyさん
2007/07/13(金) 17:40:37ID:???テーブルを増やすとソースが増える。確認がしづらい。
しかし、テーブルを減らすと汎用性に欠く。
どちらも一長一短だろうけど。
0112nobodyさん
2007/07/13(金) 17:41:27ID:???じゃあクエリ送信するときに一度テーブルくっつけちゃえばいいんじゃね?
0113nobodyさん
2007/07/13(金) 17:50:35ID:???そんなに気にするほどでもないと思うけど。
アクセス数が異常に多いとか、レコード件数が億を超えるような膨大な
金融機関系のシステムなら別だけど。
0114nobodyさん
2007/07/13(金) 18:03:19ID:???てか、phpMyAdminの場合、1000件程度でも重いが・・・
■ このスレッドは過去ログ倉庫に格納されています