【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カテゴリ)の各スレで
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件程度でも重いが・・・
0115nobodyさん
2007/07/13(金) 18:07:41ID:3J3Mm2ci0116nobodyさん
2007/07/13(金) 18:16:12ID:???開いた途端に広告しか見えない状態になってから巡回先から外したよ
0117nobodyさん
2007/07/13(金) 18:26:09ID:???見ず知らずの相手に手間と労力掛けて作っても儲からなかったら意味ないしな。
0118nobodyさん
2007/07/13(金) 18:26:22ID:???PHPエディタが使えれば
0119nobodyさん
2007/07/13(金) 18:38:36ID:???mysqlとかpostgresqlつかうよりOracleだろうし、むしろCacheとか使ってみたい気もする。
0120nobodyさん
2007/07/13(金) 18:43:22ID:???○件超えたらoracleって意味不明ですが、それが何か?
0121nobodyさん
2007/07/13(金) 18:47:13ID:???知ってるよ、あくまでも、ソースいじくって独自拡張できるような専門家がいないレベルでの中小企業での話。
ポイントはココにいるレベルなら今は気に病む段間じゃないということ(当然俺も含めて)。
0122nobodyさん
2007/07/13(金) 20:51:11ID:LyxSzMMaID、Passwordはもちろん、名前、住所などもMD5で暗号化するなどして
DBに保存するんでしょうか?
また、DB専用サーバをwebサーバとは別に?作ったりするものなんですか?
0123nobodyさん
2007/07/13(金) 20:57:21ID:???DB別サーバーにするかは、規模に応じて。
あと、Web公開用とは別の用途でDBを使うかどうかも関わってくる。
0124nobodyさん
2007/07/13(金) 21:00:31ID:???0125nobodyさん
2007/07/13(金) 21:09:23ID:???0126nobodyさん
2007/07/13(金) 21:38:57ID:???0127nobodyさん
2007/07/13(金) 21:55:09ID:???これをファイルの種類順にソートさせたい。
どうすればいいんすかえろいひと。
0128nobodyさん
2007/07/13(金) 22:09:50ID:???拡張子順って事なら
$index = glob('*');
usort($index,create_function('$a,$b','return strcasecmp(pathinfo($a,PATHINFO_EXTENSION),pathinfo($b,PATHINFO_EXTENSION));'));
print_r($index);
こんな感じで。
0129nobodyさん
2007/07/13(金) 22:17:15ID:/IV1BAzj(中略)
$SRC=file(SRC_DIR.$delno.".log","r+b");
のソースで以下のようなWarningが出てまともに動作しなくなりました。
Warning: file() expects parameter 2 to be long, string given in
PHP4の時は問題なかったのですがPHP5になってエラーが出るように
なりました。何か内部変更があったのでしょうか?
0130129
2007/07/13(金) 22:22:57ID:/IV1BAzj0132nobodyさん
2007/07/13(金) 23:47:33ID:zCZ7I7UCいきなり「あ」からそれぞれの進数に変換することはできませんよね?
そもそも「あ」というのは何進数なんでしょうか?
0133nobodyさん
2007/07/14(土) 00:48:20ID:TLdn55kSSupport for PHP 4 will be discontinued at 2007-12-31. Please consider upgrading to PHP 5.2.
なんて書いてあるじゃない!!
バンザーイ!バンザーイ!
0134nobodyさん
2007/07/14(土) 01:52:33ID:YEDQCt26preg_match("/<meta name=\"description\" content=\"(.*)<\">/",$meta_desc,$desc);
echo $desc[1];
このように書いたのですが、文字列を抽出出来ません。
どうしたらいいのでしょうか?
0135134
2007/07/14(土) 02:52:15ID:???0136nobodyさん
2007/07/14(土) 03:09:34ID:UxZqEuHTpreg_match("/<meta name=\"description\" content=\"([^\"]*)\">/",$meta_desc,$desc);
0137nobodyさん
2007/07/14(土) 03:09:57ID:???0138nobodyさん
2007/07/14(土) 08:22:14ID:???そういうときはシングルクォートで囲めば? と思うわけだが
0141nobodyさん
2007/07/14(土) 09:47:41ID:???0142nobodyさん
2007/07/14(土) 10:11:10ID:???ホワイトリストでチェックするには変数が多すぎて面倒なのです
0143142
2007/07/14(土) 10:26:17ID:???0144nobodyさん
2007/07/14(土) 10:48:52ID:vAbjevhBx[1]
x[2]
・
・
・
x[15]
とx[〜]の中データが入るようにしました
それを変数に組み込むために↓のようにしたのですが
for($a = 1; $a <= 15; $a++)
{
$XXX[$a] = "".$_POST["x[$a]"]."";
}
$XXX[1]などの中にデータが入ってくれません
どのように記述したらうまく動くのでしょうか
何卒ご教授よろしくお願いします
0145nobodyさん
2007/07/14(土) 11:06:12ID:???普通に
$XXX = $_POST['x'];
でいいだろう…。
個別に入れる場合は
$XXX[1] = $_POST['x'][1];
0147nobodyさん
2007/07/14(土) 11:51:58ID:o7OpzzBdaaa
bbb
// ここまで
↑の改行を含むaaaからbbbまでの変数$stringsを、ファイルの中に一行で書き込みたいのですが
そのまま書き込むと、3行でファイルに保存されてしまいます。
そこで改行を<br />に変換するために
$strings = nl2br($strings)をして、ファイル書き込むようにしました。
今度は改行の前に<br />が追加されただけで、↓のようになりました
aaa
<br />
bbb
どうしたら$stringsの中身を一行分で書き込めるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています