トップページphp
990コメント299KB

【PHP】下らねぇ質問はここに書き込みやがれ 68

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/05/03(土) 22:52:16ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
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:???
>>240
$data = file_get_contents('php://input');

どうしてもXMLを使う理由が無いなら、
クライアント → サーバは 普通にpost
サーバ → クライアントは JSON
をお勧めする。

0242nobodyさん2008/05/08(木) 08:37:17ID:a30fSoKv
>>241
レスありがとうございます。
取得できました。
そんな方法があるとは知りませんでした。(さすがです!)
JSONの方が楽なのは承知しているのですが、色々と事情がありまして・・・
02432142008/05/08(木) 09:00:38ID:lngjMkTW
>215
それだとFORMしかリンクに使えなくなるのでテキストのリンク部分などは回避したいところです・・

>222
違います
0244nobodyさん2008/05/08(木) 09:10:35ID:???
>>243
携帯情報端末を使うのになんでFORMにしかリンクがつかえなくなるの?
0245nobodyさん2008/05/08(木) 09:12:35ID:???
何か基本的なところが理解できてない感じするね
0246nobodyさん2008/05/08(木) 09:12:48ID:???
>>243
携帯端末情報は普通のアンカーからでも取れると思うよ。
DoCoMoだと端末側に送信するか否かの確認は出るだろうけど。

それが嫌なら、
・URLにユーザIDではなく、セッションIDを持たせる。
・セッションIDはアクセス毎に変更する
とか処理しとけば要件満たせるよ。
02472432008/05/08(木) 09:58:57ID:6fBs3OYg
>244-246
すいません、勘違いしてました。

>246
セッションIDもたせたばあい、そのアドレスでアクセスしたら
他の端末でアクセスしたときのセッションの内容がみれたのですが・・
0248nobodyさん2008/05/08(木) 10:10:42ID:???
前スレの
「セッションハイジャックが毎日行われています。客に仕様だと説明しているのですが
 納得してもらえません。どう説明すればいいのでしょう?」
と似てきたな。
0249nobodyさん2008/05/08(木) 10:39:32ID:???
>>247
>セッションIDもたせたばあい、そのアドレスでアクセスしたら
>他の端末でアクセスしたときのセッションの内容がみれたのですが・・
セッション側で管理してなきゃ当然の動作だ。

まずはユーザエージェントでも見て、セッションの有効性をチェックしろ。
これで3割防げる。

そして、セッションIDをアクセス毎に変えろ。
ユーザが故意にセッションIDを流出させない限り
これで9.99割防げる。
0250nobodyさん2008/05/08(木) 11:16:11ID:???
>>248
いちいち前スレのことをもちだすな
ストーカー気質で気持ち悪い
0251nobodyさん2008/05/08(木) 11:33:28ID:???
ストーカーされて気持ち悪いの間違いでは?
0252nobodyさん2008/05/08(木) 11:36:09ID:???
>>248=>>251
0253nobodyさん2008/05/08(木) 11:43:53ID:???



    .__
    ヽ|´∀`|ノ <先生!fscanfがおかしいです!
    |__| 
     | |

0254nobodyさん2008/05/08(木) 11:45:46ID:???
仕様です
02552432008/05/08(木) 12:03:56ID:6fBs3OYg
>>249
もしよければ具体的なソースコードなど教えてもらえないでしょうか?
0256nobodyさん2008/05/08(木) 12:04:51ID:???
えっ!
0257nobodyさん2008/05/08(木) 12:05:52ID:???
びっくりしたなぁもう!
0258nobodyさん2008/05/08(木) 12:07:34ID:BM6vmusK
http://www.cgikon.com/search/detail.php3?menu=1&cgi_id=426
これスクリプトおかしくない?
0259nobodyさん2008/05/08(木) 12:14:31ID:???
>>243
ググレばやまほど情報出てくるよ。
ロジックを考える事でPGは育つので、
自分で考えてみると良いと思う。

ヒント

 $_SESSION['USER_AGENT'] を保存しておいて、
 アクセス毎に、ユーザエージェントが変わってないかチェック。

 セッションIDを毎回変えるというのは、
 session_regenerate_id で検索すればいいよ。
0260nobodyさん2008/05/08(木) 12:26:13ID:???
>>258
おかしくないんじゃね?書き方が古いが

斜めにしか読んでないから納得いかないなら具体的に示せ
02612432008/05/08(木) 12:33:03ID:6fBs3OYg
>>259
同じ機種だと同一のagentにならないですか?
0262nobodyさん2008/05/08(木) 12:36:29ID:???
>>261
何度いえばわかりますか携帯端末情報とればいいだろ
0263nobodyさん2008/05/08(木) 12:41:47ID:???
>>260
レンタルサーバーに設置して予定編集ページに飛ぶためにクリッコしてもページが切り替わらんのです。
自宅サーバー設置してやってみましたが同じだったのでスクリプトかと思いまして
0264nobodyさん2008/05/08(木) 12:44:28ID:???
>>263
まずおまえが使ってる鯖設定とかphpバージョンとかphp.iniの設定とかあるんじゃないのかね?
0265nobodyさん2008/05/08(木) 12:54:16ID:???
>>263
ヒント:古いバージョンと新バージョンのPHPでのGETとPOSTの取得方法

ソースみたら動かなくて当然
よく読まなかったのかい?
02662432008/05/08(木) 14:27:27ID:6fBs3OYg
>>262
DoCoMoだと毎回確認が出てうざくなるので
できれば使いたくないのですが・・・
ページによっては使うことになると思うんですが。
0267nobodyさん2008/05/08(木) 14:47:17ID:???
いつの時代の話だよw
0268nobodyさん2008/05/08(木) 14:55:12ID:???
>>266
一回だけ認証すればあとはセッション使うだけだろ

ちなみにguid=onでIDが取れるようになったが、簡単に偽装できるのでお薦めしない
0269nobodyさん2008/05/08(木) 15:33:41ID:???
セッション処理で接続先の環境が違った場合の処理ってどうするのがいいですか?
セッションの内容を消してしまうと、本来のユーザが困るし・・・
0270nobodyさん2008/05/08(木) 15:35:29ID:???
最近下らない質問じゃなく頭悪い質問が多いな
02712272008/05/08(木) 15:41:46ID:???
>>228

鯖というと自分側のですよね?
相手側は直アクセスでは遅くないし


でも 外部へのアクセスだけがそんなに遅いもんです?
なにか解決方法ないものか…

もちろんキャッシュはしてるけど してないときが激遅です
0272nobodyさん2008/05/08(木) 15:55:56ID:???
>>227
DNS?一度IPでアクセスしてみて確認
0273nobodyさん2008/05/08(木) 16:13:07ID:???
>>270
答えられないなら黙っとけよゴミ虫
0274nobodyさん2008/05/08(木) 16:19:20ID:???
>>265
まじあざっす!
まったくPHPがわからない素人なのです
.htaccessでregister_globalsをONにしたらできました
02752692008/05/08(木) 16:35:36ID:???
接続環境の変化を検知した時点で
セッションIDを変更して新規のセッションとして開始すると、
UAをころころ変えながら繰り返しアクセスすることで
セッションリソースを大量消費される攻撃に晒される危険があるかと思います。

またexitで処理を停止させてしまうのも、あまりよろしくない。
ルーティングは、後に任せるべき。

セッションがない状態でアクセスした時と同様の処理をしたいのですが、
既にその時点でセッションは開始されてしまっているので、
なかなかむずかしいんですよね・・・
02762692008/05/08(木) 16:43:38ID:???
「$_SESSIONをクリアし、
それでいながら、
その変更を本来のセッションストレージに反映させず、
また新規でセッション領域を消費しない」
と処理をやればいいかと思います
どうすればいいですか?
0277nobodyさん2008/05/08(木) 17:44:50ID:???
>>274
なぜ、現行Verではデフォルトでregister_globals=offになっているのかも知っておこうね。
0278nobodyさん2008/05/08(木) 18:23:08ID:???
>>243
>>261
>同じ機種だと同一のagentにならないですか?
逆を言えば、同一機種(+同一ファームウェア?)で無い限りはアクセスを遮断出来ます。
実装が簡単な割に得られる効果は大きいです。

>セッションIDを毎回変えるというのは、
>session_regenerate_id で検索すればいいよ。

は検索しましたか?
URLにセッションIDを含む以上、URLが漏れたら非常に危険です。
しかしセッションID自体をアクセス毎に変えることで、
この危険性はほぼ100%解消できます。

間違えて表示中のURLを漏らしてしまったとしても、
そのURLに含まれるセッションIDは既に無効になっている事になるからです。
0279nobodyさん2008/05/08(木) 18:32:13ID:???
>>269
1.接続環境の変更は考慮しない
 
2.接続環境の変更を確認した時点で、セッションを適切に破棄し、
 新セッションを開始する。
 
>接続環境の変化を検知した時点で
>セッションIDを変更して新規のセッションとして開始すると

新規セッション開始前に、旧セッションを破棄すればいいだけでは?

>UAをころころ変えながら繰り返しアクセスすることで
>セッションリソースを大量消費される攻撃に晒される危険があるかと思います。
 
 まずセッション管理はどうしてるの?
 ブラウザ終了時までのセッションであれば、
 ブラウザ起動する毎に新セッションが発行され、リソース消費を防ぐ手段はありません。
 
 クッキーに有効期限が設定されているのであれば、
 適切に不要なセッションを削除する事でリソースの消費は防げます
0280nobodyさん2008/05/08(木) 19:47:02ID:???
セッションにどんなでかいデータ持たせるつもりなんだ?
0281nobodyさん2008/05/08(木) 20:04:07ID:???
iノードは有限だから小さくてもファイル大量に作られたら嫌じゃね?
っていうか、セッションファイルが大量になった時のパフォーマンスどうなんだろ?
特に考えたこともなかったけど
symfonyのキャッシュ機構みたいに遅くならない工夫してんのかな
0282nobodyさん2008/05/08(木) 21:24:09ID:???
ファイルに保存するのであればOS依存だろうし。
パフォーマンスに影響する程のモノでは無い。
きちんと破棄処理すりゃ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:???
>>283
実装の違い。
PHPのurldecodeは+をスペース文字としてデコードする。

js側で encodeURIComponent() 使えばいいよ。
0285nobodyさん2008/05/08(木) 22:38:35ID:???
>>284
フムウそんな罠があったとは
調べてみるサンクス
0286nobodyさん2008/05/08(木) 23:28:14ID:???
プレス‐リリースを発信してるサイトはPHPで作ってるのが多いですが、簡単に作れますか?
0287nobodyさん2008/05/08(木) 23:36:49ID:???
質問内容から判断すると簡単には作れないだろう
誰かに作成依頼するなら話は別だが
02882272008/05/09(金) 00:29:55ID:???
>>272

どもです
直だと早いんですよねー

PHPからだと遅い… 謎
鯖がくそなのかなあああああ
0289nobodyさん2008/05/09(金) 00:38:14ID:???
そもそも、その直でのアクセスしてるマシンとPHPが動いてるマシンが
同一なのかそうでないのかすら書かれてないのに判断できる訳がない

違うと推測して>>272のIPアドレスでのアクセスは試してみたのか?
02902272008/05/09(金) 01:08:14ID:???
>>289

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:???
02932272008/05/09(金) 02:55:54ID:???
>>291

その辺はテストしてますよー

PHPからだと遅い…
simplexml_load_fileというか HTTPリクエスト系が激遅

鯖なのかな
それにしては激遅だ
02942272008/05/09(金) 03:06:20ID:???
w3m もう一度試したら 遅いわ・・・

鯖なんかなあ
時間帯が時間帯だしなあ

PHPからはいつやっても遅いのはたしかなんだけど
0295nobodyさん2008/05/09(金) 03:12:39ID:???
とりあえずIDは出した前
02962272008/05/09(金) 03:16:08ID:snanmjyt
wgetでやっても同じですねー

Resolving ... で時間がかかってる

時間が時間だけにたまたまかもだけど

ブラウザからとPHPからとで 相手側がなんか処理わけとるんかなあ
02972272008/05/09(金) 03:19:58ID:snanmjyt
出てきた IPでつないだら早い・・・・

これはDNSが問題???

どうしようもないのか よくわからないんですけど
02982272008/05/09(金) 03:32:48ID:snanmjyt
わかたこと

w3m, getw から ドメインでアクセスすると遅い
IP直でアクセスすると早い

Resolving ドメイン名 .... が長い

だけど nslookupでドメインからひいて見ると IPはすぐに返ってくる
よくわからん・・・

その場しのぎでIPでアクセスするようにするか・・
0299nobodyさん2008/05/09(金) 03:50:29ID:???
>>272,289でとっくに言われてるのに・・・
03002772008/05/09(金) 03:55:06ID:snanmjyt
すんません
いみがわからなかったから調べてました…

PHPからgethostbyname()で事前に変換してみても おそかった
直IPだと早い

ということは 解決方法はなしですかね??
今、IP直でやるようにしましたが 万が一相手の鯖がかわったらアウトですよね
0301nobodyさん2008/05/09(金) 03:59:05ID:???
解決方法はレンサバに文句を言う事

予想ではipv6関係でbind9が遅くなってる
でもこんなんはレンサバの設定を見なきゃ何も言えん
もはやPHP関係ないし
03022272008/05/09(金) 04:03:33ID:snanmjyt
>>301

そうですか…
とりあえず原因がすっきりしたことに感謝します

レンサバにもきいてみます

しかたないのでしばらくはIP直でやるか
cronでときどき gethostbyname しておいて それを使うとかしようと思います
0303nobodyさん2008/05/09(金) 04:26:38ID:???
test
0304nobodyさん2008/05/09(金) 08:07:25ID:???
いつからここは日記帳になったんだ
03052432008/05/09(金) 09:38:31ID:NVAYhOqr
みなさんありがとうございました。
ようやくそれなりに満足できるものが作れました。
0306nobodyさん2008/05/09(金) 09:42:34ID:???
k.k.projects再始動します

帰ってきたk.k.projects【私がやります】
http://pc11.2ch.net/test/read.cgi/php/1210192743/
0307nobodyさん2008/05/09(金) 11:35:21ID:???
<a href="*****.php<?=SID?>">リンク</a>
というのを
<?php ?>のなかで書く場合どう書けばいいのでしょうか?

<?php echo "<a href=\"*****.php" ?><?=SID?><?php echo "\">リンク</a>">

ではかっこ悪いような・・・
0308nobodyさん2008/05/09(金) 11:41:47ID:???
<?php echo '<a href="*****.php"'.SID.'>リンク</a>'; ?>

てか、配布されてるスクリプト改造したいんだろうけど、
ちょっとぐらいは言語の勉強しようよ・・・
0309nobodyさん2008/05/09(金) 11:51:10ID:???
<?php
echo '<a href="*****.php' . SID . '">リンク</a>';
?>
0310nobodyさん2008/05/09(金) 12:30:14ID:???
PHPファイルをコマンドラインから起動しmysql_connect()を実行したいのですが
Call to undefined function: mysql_connect()
と出てしまいます。
web上からは正常に動くのですがどのようにすればいいのでしょうか
03113102008/05/09(金) 12:31:11ID:???
自己解決しました
0312nobodyさん2008/05/09(金) 12:32:40ID:???
コマンドラインとWebで使ってるphp.iniが違ってるんじゃなかろうか。
0313nobodyさん2008/05/09(金) 12:49:35ID:???
>>312
ありがとうございます。
-c オプションでphp.iniを指定したところ無事動きました。
0314nobodyさん2008/05/09(金) 14:36:27ID:TK9WqWmp
いまログインしているユーザー数を取得したいのですがどのような仕組みなんでしょうか?

ttp://xoopscube.jp/のオンライン状況という機能をつくたいのですが、
pearパッケージでそのようなものがあるのならなるべく利用して作りたいです。
0315nobodyさん2008/05/09(金) 14:53:28ID:???
現在生成されているセッション数読み込んでんじゃね?
0316nobodyさん2008/05/09(金) 15:08:30ID:???
>>315

>>314じゃないけど、そんな関数あるの?
以前気になって調べたけど、見つけられなかった。
http://www.php.net/manual/ja/book.session.php
0317nobodyさん2008/05/09(金) 15:15:33ID:???
session_save_pathを使って、保存先を変更して固定
そこのファイルを数えるとかだとダメかな
0318nobodyさん2008/05/09(金) 15:18:49ID:???
>>317
そこっと設定によってはアクセスできないんじゃないの?
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:???
で、そのユニークなIDというやつをどうやって抽出するので?
0326nobodyさん2008/05/09(金) 16:46:13ID:TK9WqWmp
すいません、まちがえました
idではなく、ipです
0327nobodyさん2008/05/09(金) 16:49:03ID:???
ログイン時のIDと時間を記録しておけばいいじゃん
ログアウトしたら消し、タイムアウトしたら消し
0328nobodyさん2008/05/09(金) 16:50:54ID:???
ログアウトするとは限らなく根?
0329nobodyさん2008/05/09(金) 16:51:32ID:???
あと、こういったたぐいのスクリプトってログインしなくてもみれてるよ
0330nobodyさん2008/05/09(金) 16:55:23ID:???
時代か・・・ちょっと昔のWEBチャットには普通にあったよね。
訪問者のIPアドレス/時刻を記録して、
3分くらい前までのIP数をカウント。

それだけだ。
0331nobodyさん2008/05/09(金) 17:05:13ID:???
こんなのも思いつかないってある意味凄いな。
0332nobodyさん2008/05/09(金) 17:07:31ID:???
>>324
アクセスログだと、だんだん長くなるからパフォーマンスが、ちと不安。

自分は使ったことはないけど、共有メモリに session_id で取得したIDをキーとして
最終アクセス時刻を格納した配列を格納して、それからカウントしたほうがいい気がする。

http://www.php.net/manual/ja/book.shmop.php
http://www.php.net/manual/ja/function.session-id.php
0333nobodyさん2008/05/09(金) 17:08:27ID:???
>>331
答えれもしなかった奴は黙っとけよ。ホームレスが。
0334nobodyさん2008/05/09(金) 17:10:16ID:???
アクセスが多かったら処理がすごいことになりそうだな
0335nobodyさん2008/05/09(金) 17:11:21ID:???
>>332 訂正
マニュアル見直したら、共有メモリって、直には配列とかオブジェクト格納できないっぽい。
まぁ、適当なデータ構造作れば、意図することは可能だと思うけど。
0336nobodyさん2008/05/09(金) 17:15:09ID:TK9WqWmp
いまttp://www.yumemaboroshi.net/65rank0/ここに登録されたオンラインカウンターを何個か
dlしてソースみたのですが、自分のやり方でも問題ないかと思いました。

ご指摘された大量アクセスの場合に備えて、>>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:???
ガベコレぐらい自分で作れよw
0340nobodyさん2008/05/09(金) 17:22:35ID:???
>>339
お前が作れよカビ饅頭
■ このスレッドは過去ログ倉庫に格納されています