【PHP】下らねぇ質問はここに書き込みやがれ 68
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/05/03(土) 22:52:16ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは970が立ててください立たなかった場合は980よろ
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 67
http://pc11.2ch.net/test/read.cgi/php/1207863515/
◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を必ず明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくはトリップをつける事。
◆質問後の注意
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくは質問時のトリップをつける事。
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0241nobodyさん
2008/05/08(木) 08:06:49ID:???$data = file_get_contents('php://input');
どうしてもXMLを使う理由が無いなら、
クライアント → サーバは 普通にpost
サーバ → クライアントは JSON
をお勧めする。
0242nobodyさん
2008/05/08(木) 08:37:17ID:a30fSoKvレスありがとうございます。
取得できました。
そんな方法があるとは知りませんでした。(さすがです!)
JSONの方が楽なのは承知しているのですが、色々と事情がありまして・・・
0243214
2008/05/08(木) 09:00:38ID:lngjMkTWそれだとFORMしかリンクに使えなくなるのでテキストのリンク部分などは回避したいところです・・
>222
違います
0245nobodyさん
2008/05/08(木) 09:12:35ID:???0246nobodyさん
2008/05/08(木) 09:12:48ID:???携帯端末情報は普通のアンカーからでも取れると思うよ。
DoCoMoだと端末側に送信するか否かの確認は出るだろうけど。
それが嫌なら、
・URLにユーザIDではなく、セッションIDを持たせる。
・セッションIDはアクセス毎に変更する
とか処理しとけば要件満たせるよ。
0247243
2008/05/08(木) 09:58:57ID:6fBs3OYgすいません、勘違いしてました。
>246
セッションIDもたせたばあい、そのアドレスでアクセスしたら
他の端末でアクセスしたときのセッションの内容がみれたのですが・・
0248nobodyさん
2008/05/08(木) 10:10:42ID:???「セッションハイジャックが毎日行われています。客に仕様だと説明しているのですが
納得してもらえません。どう説明すればいいのでしょう?」
と似てきたな。
0249nobodyさん
2008/05/08(木) 10:39:32ID:???>セッションIDもたせたばあい、そのアドレスでアクセスしたら
>他の端末でアクセスしたときのセッションの内容がみれたのですが・・
セッション側で管理してなきゃ当然の動作だ。
まずはユーザエージェントでも見て、セッションの有効性をチェックしろ。
これで3割防げる。
そして、セッションIDをアクセス毎に変えろ。
ユーザが故意にセッションIDを流出させない限り
これで9.99割防げる。
0251nobodyさん
2008/05/08(木) 11:33:28ID:???0253nobodyさん
2008/05/08(木) 11:43:53ID:???.__
ヽ|´∀`|ノ <先生!fscanfがおかしいです!
|__|
| |
0254nobodyさん
2008/05/08(木) 11:45:46ID:???0255243
2008/05/08(木) 12:03:56ID:6fBs3OYgもしよければ具体的なソースコードなど教えてもらえないでしょうか?
0256nobodyさん
2008/05/08(木) 12:04:51ID:???0257nobodyさん
2008/05/08(木) 12:05:52ID:???0258nobodyさん
2008/05/08(木) 12:07:34ID:BM6vmusKこれスクリプトおかしくない?
0259nobodyさん
2008/05/08(木) 12:14:31ID:???ググレばやまほど情報出てくるよ。
ロジックを考える事でPGは育つので、
自分で考えてみると良いと思う。
ヒント
$_SESSION['USER_AGENT'] を保存しておいて、
アクセス毎に、ユーザエージェントが変わってないかチェック。
セッションIDを毎回変えるというのは、
session_regenerate_id で検索すればいいよ。
0261243
2008/05/08(木) 12:33:03ID:6fBs3OYg同じ機種だと同一のagentにならないですか?
0263nobodyさん
2008/05/08(木) 12:41:47ID:???レンタルサーバーに設置して予定編集ページに飛ぶためにクリッコしてもページが切り替わらんのです。
自宅サーバー設置してやってみましたが同じだったのでスクリプトかと思いまして
0265nobodyさん
2008/05/08(木) 12:54:16ID:???ヒント:古いバージョンと新バージョンのPHPでのGETとPOSTの取得方法
ソースみたら動かなくて当然
よく読まなかったのかい?
0266243
2008/05/08(木) 14:27:27ID:6fBs3OYgDoCoMoだと毎回確認が出てうざくなるので
できれば使いたくないのですが・・・
ページによっては使うことになると思うんですが。
0267nobodyさん
2008/05/08(木) 14:47:17ID:???0268nobodyさん
2008/05/08(木) 14:55:12ID:???一回だけ認証すればあとはセッション使うだけだろ
ちなみにguid=onでIDが取れるようになったが、簡単に偽装できるのでお薦めしない
0269nobodyさん
2008/05/08(木) 15:33:41ID:???セッションの内容を消してしまうと、本来のユーザが困るし・・・
0270nobodyさん
2008/05/08(木) 15:35:29ID:???0271227
2008/05/08(木) 15:41:46ID:???鯖というと自分側のですよね?
相手側は直アクセスでは遅くないし
でも 外部へのアクセスだけがそんなに遅いもんです?
なにか解決方法ないものか…
もちろんキャッシュはしてるけど してないときが激遅です
0274nobodyさん
2008/05/08(木) 16:19:20ID:???まじあざっす!
まったくPHPがわからない素人なのです
.htaccessでregister_globalsをONにしたらできました
0275269
2008/05/08(木) 16:35:36ID:???セッションIDを変更して新規のセッションとして開始すると、
UAをころころ変えながら繰り返しアクセスすることで
セッションリソースを大量消費される攻撃に晒される危険があるかと思います。
またexitで処理を停止させてしまうのも、あまりよろしくない。
ルーティングは、後に任せるべき。
セッションがない状態でアクセスした時と同様の処理をしたいのですが、
既にその時点でセッションは開始されてしまっているので、
なかなかむずかしいんですよね・・・
0276269
2008/05/08(木) 16:43:38ID:???それでいながら、
その変更を本来のセッションストレージに反映させず、
また新規でセッション領域を消費しない」
と処理をやればいいかと思います
どうすればいいですか?
0277nobodyさん
2008/05/08(木) 17:44:50ID:???なぜ、現行Verではデフォルトでregister_globals=offになっているのかも知っておこうね。
0278nobodyさん
2008/05/08(木) 18:23:08ID:???>>261
>同じ機種だと同一のagentにならないですか?
逆を言えば、同一機種(+同一ファームウェア?)で無い限りはアクセスを遮断出来ます。
実装が簡単な割に得られる効果は大きいです。
>セッションIDを毎回変えるというのは、
>session_regenerate_id で検索すればいいよ。
は検索しましたか?
URLにセッションIDを含む以上、URLが漏れたら非常に危険です。
しかしセッションID自体をアクセス毎に変えることで、
この危険性はほぼ100%解消できます。
間違えて表示中のURLを漏らしてしまったとしても、
そのURLに含まれるセッションIDは既に無効になっている事になるからです。
0279nobodyさん
2008/05/08(木) 18:32:13ID:???1.接続環境の変更は考慮しない
2.接続環境の変更を確認した時点で、セッションを適切に破棄し、
新セッションを開始する。
>接続環境の変化を検知した時点で
>セッションIDを変更して新規のセッションとして開始すると
新規セッション開始前に、旧セッションを破棄すればいいだけでは?
>UAをころころ変えながら繰り返しアクセスすることで
>セッションリソースを大量消費される攻撃に晒される危険があるかと思います。
まずセッション管理はどうしてるの?
ブラウザ終了時までのセッションであれば、
ブラウザ起動する毎に新セッションが発行され、リソース消費を防ぐ手段はありません。
クッキーに有効期限が設定されているのであれば、
適切に不要なセッションを削除する事でリソースの消費は防げます
0280nobodyさん
2008/05/08(木) 19:47:02ID:???0281nobodyさん
2008/05/08(木) 20:04:07ID:???っていうか、セッションファイルが大量になった時のパフォーマンスどうなんだろ?
特に考えたこともなかったけど
symfonyのキャッシュ機構みたいに遅くならない工夫してんのかな
0282nobodyさん
2008/05/08(木) 21:24:09ID:???パフォーマンスに影響する程のモノでは無い。
きちんと破棄処理すりゃiノードを圧迫する事はありえない。
どうしてもきになるなら、session_save_handlerでも使って好きに実装すればいいんじゃね?
0283nobodyさん
2008/05/08(木) 21:39:36ID:???JavaScriptでencodeURIした文字列を受け取ると"+"だけ消えるんですが何故?
a.html
<select name="select"><option value="A+-*/">
a.js
var a=encodeURI(document.forms[0].select.value) ←この時点では"A+-*/"
(xmlHTTPRequestでPOST送信)
a.php
a=$_POST['a'] ←ここで"A -*/"になってる
+だけの理由がよくわかりません。
0284nobodyさん
2008/05/08(木) 22:25:28ID:???実装の違い。
PHPのurldecodeは+をスペース文字としてデコードする。
js側で encodeURIComponent() 使えばいいよ。
0286nobodyさん
2008/05/08(木) 23:28:14ID:???0287nobodyさん
2008/05/08(木) 23:36:49ID:???誰かに作成依頼するなら話は別だが
0289nobodyさん
2008/05/09(金) 00:38:14ID:???同一なのかそうでないのかすら書かれてないのに判断できる訳がない
違うと推測して>>272のIPアドレスでのアクセスは試してみたのか?
0290227
2008/05/09(金) 01:08:14ID:???PHPが動いてるのはレンサバですねー
アクセスしてるのは外部のサイトの公開API
直だと早い早い RESTだからブラウザ直でアクセスしても早いよ
借りてるうちのレンサバのPHP -> 外部APIが激遅
なんでかねえ・・・
0291nobodyさん
2008/05/09(金) 01:26:12ID:???simplexml_load_file()を含む部分のコードを自分の端末で動かして外部サイトに繋いでみるとか
レンサバにsshとかで入れるのなら、レンサバのw3m等で繋いでみるとか
PHPの問題なのか、レンサバの問題なのかすらわからんじゃないか
0292nobodyさん
2008/05/09(金) 01:26:13ID:???0293227
2008/05/09(金) 02:55:54ID:???その辺はテストしてますよー
PHPからだと遅い…
simplexml_load_fileというか HTTPリクエスト系が激遅
鯖なのかな
それにしては激遅だ
0294227
2008/05/09(金) 03:06:20ID:???鯖なんかなあ
時間帯が時間帯だしなあ
PHPからはいつやっても遅いのはたしかなんだけど
0295nobodyさん
2008/05/09(金) 03:12:39ID:???0296227
2008/05/09(金) 03:16:08ID:snanmjytResolving ... で時間がかかってる
時間が時間だけにたまたまかもだけど
ブラウザからとPHPからとで 相手側がなんか処理わけとるんかなあ
0297227
2008/05/09(金) 03:19:58ID:snanmjytこれはDNSが問題???
どうしようもないのか よくわからないんですけど
0298227
2008/05/09(金) 03:32:48ID:snanmjytw3m, getw から ドメインでアクセスすると遅い
IP直でアクセスすると早い
Resolving ドメイン名 .... が長い
だけど nslookupでドメインからひいて見ると IPはすぐに返ってくる
よくわからん・・・
その場しのぎでIPでアクセスするようにするか・・
0300277
2008/05/09(金) 03:55:06ID:snanmjytいみがわからなかったから調べてました…
PHPからgethostbyname()で事前に変換してみても おそかった
直IPだと早い
ということは 解決方法はなしですかね??
今、IP直でやるようにしましたが 万が一相手の鯖がかわったらアウトですよね
0301nobodyさん
2008/05/09(金) 03:59:05ID:???予想ではipv6関係でbind9が遅くなってる
でもこんなんはレンサバの設定を見なきゃ何も言えん
もはやPHP関係ないし
0302227
2008/05/09(金) 04:03:33ID:snanmjytそうですか…
とりあえず原因がすっきりしたことに感謝します
レンサバにもきいてみます
しかたないのでしばらくはIP直でやるか
cronでときどき gethostbyname しておいて それを使うとかしようと思います
0303nobodyさん
2008/05/09(金) 04:26:38ID:???0304nobodyさん
2008/05/09(金) 08:07:25ID:???0305243
2008/05/09(金) 09:38:31ID:NVAYhOqrようやくそれなりに満足できるものが作れました。
0306nobodyさん
2008/05/09(金) 09:42:34ID:???帰ってきたk.k.projects【私がやります】
http://pc11.2ch.net/test/read.cgi/php/1210192743/
0307nobodyさん
2008/05/09(金) 11:35:21ID:???というのを
<?php ?>のなかで書く場合どう書けばいいのでしょうか?
<?php echo "<a href=\"*****.php" ?><?=SID?><?php echo "\">リンク</a>">
ではかっこ悪いような・・・
0308nobodyさん
2008/05/09(金) 11:41:47ID:???てか、配布されてるスクリプト改造したいんだろうけど、
ちょっとぐらいは言語の勉強しようよ・・・
0309nobodyさん
2008/05/09(金) 11:51:10ID:???echo '<a href="*****.php' . SID . '">リンク</a>';
?>
0310nobodyさん
2008/05/09(金) 12:30:14ID:???Call to undefined function: mysql_connect()
と出てしまいます。
web上からは正常に動くのですがどのようにすればいいのでしょうか
0311310
2008/05/09(金) 12:31:11ID:???0312nobodyさん
2008/05/09(金) 12:32:40ID:???0314nobodyさん
2008/05/09(金) 14:36:27ID:TK9WqWmpttp://xoopscube.jp/のオンライン状況という機能をつくたいのですが、
pearパッケージでそのようなものがあるのならなるべく利用して作りたいです。
0315nobodyさん
2008/05/09(金) 14:53:28ID:???0316nobodyさん
2008/05/09(金) 15:08:30ID:???>>314じゃないけど、そんな関数あるの?
以前気になって調べたけど、見つけられなかった。
http://www.php.net/manual/ja/book.session.php
0317nobodyさん
2008/05/09(金) 15:15:33ID:???そこのファイルを数えるとかだとダメかな
0319nobodyさん
2008/05/09(金) 15:21:33ID:???0320nobodyさん
2008/05/09(金) 16:23:57ID:???0321nobodyさん
2008/05/09(金) 16:26:43ID:???どういう仕組みなんだろ
0322nobodyさん
2008/05/09(金) 16:27:42ID:???0323nobodyさん
2008/05/09(金) 16:27:45ID:???0324nobodyさん
2008/05/09(金) 16:35:23ID:TK9WqWmpセッション使ったやり方がどうしてもわからないのでこんな感じを考えてみました
訪問者のアクセスログを取得
↓
現在の時刻より直近1分前までののログを取る
↓
ユニークなidのみ抽出、カウント
↓
オンライン人数表示
0325nobodyさん
2008/05/09(金) 16:40:19ID:???0326nobodyさん
2008/05/09(金) 16:46:13ID:TK9WqWmpidではなく、ipです
0327nobodyさん
2008/05/09(金) 16:49:03ID:???ログアウトしたら消し、タイムアウトしたら消し
0328nobodyさん
2008/05/09(金) 16:50:54ID:???0329nobodyさん
2008/05/09(金) 16:51:32ID:???0330nobodyさん
2008/05/09(金) 16:55:23ID:???訪問者のIPアドレス/時刻を記録して、
3分くらい前までのIP数をカウント。
それだけだ。
0331nobodyさん
2008/05/09(金) 17:05:13ID:???0332nobodyさん
2008/05/09(金) 17:07:31ID:???アクセスログだと、だんだん長くなるからパフォーマンスが、ちと不安。
自分は使ったことはないけど、共有メモリに session_id で取得したIDをキーとして
最終アクセス時刻を格納した配列を格納して、それからカウントしたほうがいい気がする。
http://www.php.net/manual/ja/book.shmop.php
http://www.php.net/manual/ja/function.session-id.php
0334nobodyさん
2008/05/09(金) 17:10:16ID:???0335nobodyさん
2008/05/09(金) 17:11:21ID:???マニュアル見直したら、共有メモリって、直には配列とかオブジェクト格納できないっぽい。
まぁ、適当なデータ構造作れば、意図することは可能だと思うけど。
0336nobodyさん
2008/05/09(金) 17:15:09ID:TK9WqWmpdlしてソースみたのですが、自分のやり方でも問題ないかと思いました。
ご指摘された大量アクセスの場合に備えて、>>332さんのアドバイスを元にやり方を考えて見ます。
ありがとうございます
0337nobodyさん
2008/05/09(金) 17:16:10ID:???timstamp,ipadress
timstamp,ipadress
timstamp,ipadress
timstamp,ipadress
の2カラムのCSVなりをアクセス毎に走査して、指定秒数が過ぎた行は削除。
後は残りの行数カウントするだけなんだが。
同一IPが1カウントになるのが嫌なら、クッキーでも食わして判別すりゃOK
0338nobodyさん
2008/05/09(金) 17:18:53ID:???0339nobodyさん
2008/05/09(金) 17:18:57ID:???■ このスレッドは過去ログ倉庫に格納されています