【PHP】下らねぇ質問はここに書き込みやがれ 56
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/10/11(木) 17:55:41ID:uObe69hrPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 55
http://pc11.2ch.net/test/read.cgi/php/1191058556/
◆質問する時の注意
・ sage進行(メール欄にsageと記入すること)「sage進行」とはスレを目立つ上部に上げないことによって、荒らしが発見できないようにすることです
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・ 書き込むときには、「公式マニュアル、リファレンス本は読みました」と明記すること
(でないと、公式マニュアル読めと煽られます)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
・質問者が「公式マニュアル読んだ」と書いていないからといって、
公式マニュアルに書いてもいないのに、公式マニュアルよめと適当なことを言わないこと。
質問者は公式マニュアルを読んでいるかもしれない。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0082nobodyさん
2007/10/13(土) 13:27:08ID:???まぁ、普通は分けるんじゃないの。
何でセーフモードを意識しなきゃいけなくなったのかがちと謎だけど、
日が変わる直前にcronで他のスクリプトとか使ってファイル生成させとけば?
一般に、ログ吐く側は単一ファイルにそのまま吐き続けさせといて
logrotateとか使ってファイル切り替えるもんだと思うけど。
0084nobodyさん
2007/10/13(土) 14:10:59ID:???開発環境での話です。
だから負荷は気にしてません
要は同じ階層のフォルダ内に
1. Aフォルダ(.htmlでphp実行可能)、この手のフォルダが複数あり
2. Bフォルダ(.htmlでphp実行不可能)、この手のフォルダは一つのみ
という環境を作りたいのですが、大多数が1に該当する以上、
1をデフォルトの動作とし、例外的な2に対し別途設定を施す事で環境を構築したいと思っています。
0085nobodyさん
2007/10/13(土) 14:15:40ID:???Apacheのモジュール版PHPでなら簡単にできるよ
動作させたくないディレクトリのhtaccessに
php_flag engine off
と書けば良い
>>80
「デザインパターン シングルトン」
をグーグルさんで検索してみると良い
0087nobodyさん
2007/10/13(土) 14:24:32ID:???>>>80
>「デザインパターン シングルトン」
前にもあったけど、phpはメモリーを共有できないから、
シングルトンは使えないよ。javaなら大丈夫だけどね。
0088nobodyさん
2007/10/13(土) 14:29:19ID:???0090nobodyさん
2007/10/13(土) 14:45:50ID:???規模のでかさにもよるが・・・
メモリ空間の共有も前ツリー構造の人が
メモリ空間共有用の関数がどれかを書いてたし・・・・
0091nobodyさん
2007/10/13(土) 14:47:06ID:???試してみましたが駄目でした。
多分モジュール版PHPを使用していないのだと思いますが、
モジュール版が何か分かりませんでした。
>>86
言っている意味が分からないのですが。
開発環境は1つのサーバーで行っています
一方外部公開用のサーバーは複数あります。
そしてそのうち一つのサーバーでは拡張子htmlでphpが使えません。
そのため、開発環境のデフォルトは拡張子htmlでphpを動作可能にし、
特定のフォルダのみ、外部公開用のサーバーの仕様にあわせ拡張子htmlでphpを動作不可能にしたいと思っています。
理由はこれが開発環境の変更点が最も少なく、外部公開用のサーバーにそのまま適用できると思われる為です。
0092nobodyさん
2007/10/13(土) 14:56:42ID:???> 多分モジュール版PHPを使用していないのだと思いますが、
> モジュール版が何か分かりませんでした。
.htaccessでPHPの設定をできるやつがモジュール版で一般的なPHPのこと。
それ以外はCGI版かコマンドライン版。
しかしengine offにしたら.htmlだけじゃなく.phpでもPHP実行できなくなるような…
> そしてそのうち一つのサーバーでは拡張子htmlでphpが使えません。
環境を実機と可能な限り合わせたい、という意図は分かるんだけど、
あくまで自分の開発環境の話なら、単に.htmlのファイルの中に
PHPコードを入れないだけでもいいんじゃないの?
他のユーザに使わせたくない、って話ならともかく。
それとも、PHPの実行をさせないだけで.html中にPHPコードは埋め込んじゃうの?
0093nobodyさん
2007/10/13(土) 15:07:41ID:???>そしてそのうち一つのサーバーでは拡張子htmlでphpが使えません。
中途半端な説明ばかりしているからややこしくなるんだ。
これに尽きるんだろ。
.htaccessが使えるなら.htaccessをトップディレクトリにおいけば良いだけ、
httpd.confが弄れるなら弄れば良いだけ。両方だめなら無理だから諦めろ。
意地でもやるなら拡張子とスクリプトの内容をまとめて書きかえれるような
ソフトを自作して書き換えるしかないだろう。
0094nobodyさん
2007/10/13(土) 15:08:18ID:???ありがとうございます。
となると私の環境はモジュール版のはずですが、何故phpが動いてしまうんだろう?
それと今回の件だけに限って言えば、そのフォルダでは拡張子php自体使用していないので、
特定のフォルダ直下ではphpが実行できなくなってもかまわないです。
後、本件の目的はミス防止の為です。
他の開発で使用したものを多数流用している為、phpが間違って混入してしまう可能性があるからです。
ご指摘のとおり、入れなければ良いのですが、上記のような過程で間違って入れてしまい、
それを本番に上げて始めて気づいてあわてると言うミスを未然に防ぐ環境を構築したいと思っています。
0095nobodyさん
2007/10/13(土) 15:14:22ID:???そのレンタルサーバーでは.htaccessが使用不可です。
またhttpd.confは弄れません。
ただし自分の開発環境はhttpd.confも.htaccessも使用可能です。
現状開発環境では、httpd.confで一時的に拡張子htmlでphpが実行出来ないようにし、
拡張子htmlでphpが実行できないといけないフォルダ毎に.htaccessを設置していますが、
可能であれば、httpd.confでは拡張子htmlでphpが実行出来るようにし、
特定のフォルダでのみ.htaccessで拡張子htmlでphpを実行できないようにするのが一番スマートかなと思いました。
0096nobodyさん
2007/10/13(土) 15:14:23ID:???web上で値を使う人がその都度変えてもいけるようなものが作りたいんだけど…
0097nobodyさん
2007/10/13(土) 15:14:27ID:???この辺が原因かも。
http://slashdot.jp/~elf2000/journal/105773
> なんてこった…apache2でphp_flagって使えないの?
> php_flag engine off
に対するコメント
> VirtualHostディレクティブ使ってません?
> 使ってたらその中にDirectoryディレクティブを書いてやらないと認識しないようです。
0102nobodyさん
2007/10/13(土) 15:31:23ID:???アクセスしないファイルが紛れ込めばどちらにしろわからない。
0104nobodyさん
2007/10/13(土) 15:42:40ID:???レスありがとうございます。
>>85の記述で(一応)思い通りの動作が出来ました。
理由は>>98でした
こちらのミスです。スイマセン。
今環境をいろいろ触っている中で、そのフォルダの.htaccess使えるようにするのを忘れてましたorz
ただ、>>92に記述されているように、engine offにすると.phpでもphpが実行できなくなりました。
今回はこれで大丈夫なのですが、このレンタルサーバーにメールフォームをつけたいとかの要望があると、
このままでは問題があるので、engine off以外の対応法があればそちらを適用してみたいと思います。
>>102
まあそうなんだけど、人間ミスするのは避けられないと思うから、可能性を低くする事だけはしておきたいと思ってね。
0105nobodyさん
2007/10/13(土) 15:48:08ID:???0107nobodyさん
2007/10/13(土) 15:53:19ID:???スレ違いをここまで粘りこむ自分勝手さにこれ以上付き合う事もないだろ。
0108nobodyさん
2007/10/13(土) 16:04:07ID:???*.phpの時以外はengin offにできるように書けばいいだけだよ
あとはapacheの設定のconfファイルの書き方だからスレ違い
0109nobodyさん
2007/10/13(土) 16:14:15ID:c/lxCBKk0110nobodyさん
2007/10/13(土) 16:15:31ID:Qhys5rK+ありがとうございます。いろんなレンタルサーバで動かせるようにしたいと思いまして、
ファイルをわけることにします。
0111nobodyさん
2007/10/13(土) 16:17:48ID:???すまん、すれ違いだったのね
これ以上の事は別スレ探して聞いてきます。
アドバイスいただいた皆さんどうもです。
0112nobodyさん
2007/10/13(土) 16:18:12ID:Qhys5rK+SSIを使わず、jsで取得したものをPHPに渡したいと思います。
しかし、jsで取得したデータをPHPに渡す方法がわかりません。
どなたかヒントをいただけないでしょうか?
0114nobodyさん
2007/10/13(土) 16:37:23ID:???<inpu type=hidden name="diplaysize">
みたいな送信フォームを仕込んどいて、これのvalueをJavaScriptで設定すれば
ページ送信時に現在の画面サイズを拾えるんじゃない?
フォームを使いたくない場合はJavaScriptでcookieに値を格納させて
それをPHPで取得する、って手もある。
0115nobodyさん
2007/10/13(土) 16:54:07ID:ZZVUcY03何分前なのかを取得したいのですが、どのようにしたら出来ますか?
0118115
2007/10/13(土) 17:21:38ID:ZZVUcY03explode使って配列にする方法しか思い浮かばないんですが・・
0121nobodyさん
2007/10/13(土) 17:51:46ID:???0122nobodyさん
2007/10/13(土) 17:54:19ID:???本に載ってませんでしたとかじゃないの?
0124nobodyさん
2007/10/13(土) 18:09:22ID:4PtcrD/Pこのようなロジックってどうでしょうか?
ローカルでテストしている分には大丈夫なのですが、
負荷がものすごくかかったときにどうなのかと思ってお聞きしました。
宜しくお願いします。
1. カウント書き込み部分
ユーザーがアクセスしてきたら、fopen($counter_file, "a");で開いて「*」をwriteして閉じる
2. カウンタ取得部分
$counter_fileのファイルサイズを取得して表示する。(byte数がカウント数)
0126nobodyさん
2007/10/13(土) 18:30:04ID:???確かに斬新だけど連続リロード対策は無し?
それと結局色々機能付けたくなるんじゃない?
純粋にカウンタだけならいいかもだけどそんな負荷かかるページなのか。
捕らぬ狸の皮算用じゃあ…
0127nobodyさん
2007/10/13(土) 18:33:57ID:???0128nobodyさん
2007/10/13(土) 18:35:58ID:???0129nobodyさん
2007/10/13(土) 18:42:50ID:???0130nobodyさん
2007/10/13(土) 18:42:58ID:???5000~1万とかいくとファイルに数字しか書いてなくても壊れる
カウント時に*を書いて閉じるというが
アクセスあるたびにファイルサイズでかくなって大変になるな
0131nobodyさん
2007/10/13(土) 18:44:51ID:4PtcrD/Pレスありがとうございます。
前は、DBに保存していたんですけど、1日に多い時で数十万PVの日もありまして、
そのような時に、DBのコネクションエラーが発生して困っていました。
htmlをキャッシュしたり工夫しているのですが、カウンターのところはどうしても
リアルタイムで処理しないといけないので、その部分もDBではなくファイルでと考えています。
壊れなければ連続リロードされてもいいです。
又、アクセス1回で1byteしか消費しないので、1日ごとに$counter_fileを変えて、
cronで一日一回、昨日の$counter_fileのサイズを別の集計ファイルに加算した後削除することで、
ディスクサイズを圧迫することなく、かつtotalのアクセス数も計算できるかなぁとも思っています。
最終的に、この追加書き込みのロジックでファイルが壊れないかが一番の心配です。
0132nobodyさん
2007/10/13(土) 18:47:38ID:???ファイルサイズは50MBだろ?
でかいっつっても大した問題じゃないんじゃ?
ファイルの中身を読み込むわけでもないし。
その程度のファイルサイズはログファイルでもよく見るぞ。
そんなんで困るほどちっこいHDDでもあるまい。
0133nobodyさん
2007/10/13(土) 18:48:24ID:???数十万ごときでコネクションエラーってインデックスはれてないとか
別の所に問題ありそうな気がするがな(鯖がしょぼいとか)
0135nobodyさん
2007/10/13(土) 18:49:57ID:???でもアクセスカウンタごときのためにサーバー増強とかありえねー。
0136nobodyさん
2007/10/13(土) 18:51:36ID:???最初にカウンター作った時(shellスクリプト)、
やりかたが良く判らなかったのでその方法でやった。"1"の羅列
特にファイルが飛ぶとかなかった(PHPだとどうかな)けど、
ファイル容量が当たり前だが肥大してきて、普通のロックタイプにしてしまった。
定期的に"差分"にすれば良いかもね。でもカウンターとか最近使わなくないか?
0137nobodyさん
2007/10/13(土) 19:47:17ID:???appendはOSが保証してくれるので安全。
当然ロックは不要。
集計するときは同時に他のが集計を始めないように他にロックファイル作るなりして排他処理をかけ、
まずrename(OS保証の安全な退避法になる)し、fstatのキャッシュをフラッシュしてからやること。
要はapacheログのローテーションと同じだからググれ
0138nobodyさん
2007/10/13(土) 20:10:31ID:???げっ! そんなに簡単に壊れるものなの?
計算してみたら素人考えだと結構余裕だと思うんだがダメ?
1日4000アクセス: 21.6秒に1回
1日5000アクセス: 17.28秒に1回
1日1万アクセス: 8.64秒に1回
1日数十万PVってスゴイですね>>131
0139nobodyさん
2007/10/13(土) 20:14:09ID:???ファイルロックが確りしてないとF5連打だけで壊れる事がありますよ
0140nobodyさん
2007/10/14(日) 01:24:53ID:???0141130
2007/10/14(日) 01:27:30ID:???うちのサイトは21時〜24時がアクセスの6割ぐらいを占めてる
プログラムあんま知らん頃だったとはいえ
flockとかかけても壊れたな・・・・
0142nobodyさん
2007/10/14(日) 01:54:06ID:???数字だけでも2〜3秒でダメですか。結構シビアですね。
Cを少し勉強した時シェアード(共有)メモリってのがあったけどPHPでも出来ない?
http://jp2.php.net/manual/ja/ref.shmop.php
ファイル扱うよりいいのかどうか判りませんが。
0143nobodyさん
2007/10/14(日) 02:18:24ID:???0146nobodyさん
2007/10/14(日) 02:51:14ID:TEnpd0OZfopen($filename, "a");
でファイルがなかった場合、作成されますか?
UIDがなんたらかんたらとマニュアルに書いてあったので不安です。
winサーバでは問題なく作成されたんですが、linuxではどうなんでしょうか?
0147nobodyさん
2007/10/14(日) 03:38:03ID:???0148nobodyさん
2007/10/14(日) 03:54:52ID:zCinDJDYパスワードをSESSIONで渡してるけどバレちゃいますか?
0149nobodyさん
2007/10/14(日) 04:02:37ID:???生のパスワードをやりとりしてたら盗聴可能
何のためのセッション変数だw
0150nobodyさん
2007/10/14(日) 04:52:42ID:???0151nobodyさん
2007/10/14(日) 08:41:50ID:???0152nobodyさん
2007/10/14(日) 09:10:35ID:???0153nobodyさん
2007/10/14(日) 10:13:40ID:???0154nobodyさん
2007/10/14(日) 10:18:30ID:???共有メモリでも結局ロックはしないといけないぞ。
それにファイルロックでも負荷が問題になって変な動きになる事はたぶんあんまりないはず。
ウェブアプリだと、いつ接続が切られて死ぬかもしれないから、
ロックファイルつくれば安心、ということはない。
ロックしたあと死ねばロックされっぱなしになる。
いつ死んでもいいようにするか、接続きられてもすぐに殺されないようにするか。
それでも生き死にはApache次第だから、ロックが変になる事はあり得る。
でもPHPのある共有サーバならデータベース位あるはずだから、
そっちを使った方がたぶん速くて強い、かつ設定に依存しないポータブルなものが出来ると思う。
0155nobodyさん
2007/10/14(日) 10:25:34ID:???カウンタ自体は1バイトアペンドでやっちゃっても良さそう。
0156131
2007/10/14(日) 10:36:00ID:U7e4W6gpファイルが壊れるのが一番心配だったのですが、
実際に同じことをやられていた人や、appendはOSが保証してくれるというので安心しました。
業務でやっているわけじゃないので、絶対に壊れてはダメというわけではないのですが、
さすがに毎日のように壊れていては話にならないので、試行錯誤中でした。
頂いたレスで、
> 要はapacheログのローテーションと同じだからググれ
とありましたが、このappendのロジックを思いついたのも、
毎日のapacheのアクセスログが何で破損しないんだろう、という点からでした。
ファイルのサイズも何GBもあっても一瞬で計算できるのも利点だと思います。
とりあえず、やり方で本番環境に乗せる予定です。
どうもありがとうございました。
0157nobodyさん
2007/10/14(日) 10:36:02ID:???データベースへの接続は負荷高いし。
俺も1バイトアペンドでいいんじゃないかと思ってきたw
1バイトアペンドで何が問題?
ファイルサイズ?
一日ごとにファイルわければ問題なし。
そして、過去の日付は、ファイルサイズによるカウンタ法から
数値を入れたファイルに変換すればいいだろう。
0158nobodyさん
2007/10/14(日) 10:49:09ID:???さすがに吹き出すだろうか?w
today.dat ・・・・ファイルサイズでカウントする
2007-10-13-12345.dat・・・アクセス数12345 ファイルサイズは0
2007-10-12-44444.dat・・・アクセス数44444 ファイルサイズは0
ってな感じで。いや、中身読むより早いかなぁと思って。
ここでひらめいた! ファイル名カウンタ法!
アクセスがあるたびに、ファイル名でカウンタする。つまり
77777.dat ・・・ 77777がアクセス数
で、アクセスがあればリネーム。
リネームが成功すればカウント成功。失敗すれば
他プロセスがカウントしていたということでリトライ。
0159nobodyさん
2007/10/14(日) 10:54:49ID:???更新にラグが出るんだっけ?
0160nobodyさん
2007/10/14(日) 12:30:32ID:TEnpd0OZそれともforでNoを作っていくものなんでしょうか?
0161nobodyさん
2007/10/14(日) 12:35:47ID:???ログに記録している人の方が多いいと思われ、Noと記事の内容の不一致が起きると
都合の悪い事も出てくるからね。
0162nobodyさん
2007/10/14(日) 12:46:10ID:???0163nobodyさん
2007/10/14(日) 12:49:51ID:rdw+jS+bflockは接続が途絶えれば解除されるような?
0164nobodyさん
2007/10/14(日) 12:50:59ID:???0165nobodyさん
2007/10/14(日) 12:52:11ID:???画像掲示板に連続投稿とか出来たら最高なんですけど。
0166nobodyさん
2007/10/14(日) 12:56:42ID:???0168nobodyさん
2007/10/14(日) 13:26:30ID:???2ちゃんねるに書き込むスクリプト。
0169nobodyさん
2007/10/14(日) 13:52:38ID:???0170nobodyさん
2007/10/14(日) 13:56:37ID:???0171nobodyさん
2007/10/14(日) 14:11:23ID:???0172nobodyさん
2007/10/14(日) 15:02:40ID:???しかしカウンタでDB使っている日とってそんなにいるのか・・・
カウントするだけなのによ
0173nobodyさん
2007/10/14(日) 15:03:30ID:???0174nobodyさん
2007/10/14(日) 15:22:09ID:???0175nobodyさん
2007/10/14(日) 15:42:30ID:???0177nobodyさん
2007/10/14(日) 17:41:50ID:???個人で純粋にTOPのPVだけ取りたい人はテキストベースの方が多いんじゃない?
仕事で組む場合100%DBに頼ってる
0178nobodyさん
2007/10/14(日) 17:45:07ID:???それは、独自のロジックを組んで問題になったら、責任が自分の所にくるけど、
DBでやってトラブったら、Oracleの営業を呼んで扱き下ろしてやれば良いという姑息な打算から???
0180nobodyさん
2007/10/14(日) 18:05:50ID:???http://game13.2ch.net/test/read.cgi/mmo/1191276517/
0181nobodyさん
2007/10/14(日) 18:56:39ID:???■ このスレッドは過去ログ倉庫に格納されています