トップページphp
1001コメント311KB

【PHP】下らねぇ質問はID出して書き込みやがれ 114

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2012/01/02(月) 02:03:25.50ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 113
http://kohada.2ch.net/test/read.cgi/php/1322564127/

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
04083492012/01/07(土) 11:54:37.20ID:???
>>406
うお、これすげえ。
ブラウザ上の挙動を再現できそうですね、これはイケそうです。
敷居が高そうですがやってみます。

>>406
別に悪いことしようとなんて思ってないですよ。
そもそもfile_get_contentsという関数がphpに用意されているじゃないですか。
たまたま対象が非同期ページだっただけで。
04093492012/01/07(土) 11:56:54.91ID:???
下の方のレスは>>407さん宛でした
0410nobodyさん2012/01/07(土) 12:06:10.89ID:???
クロスサイトリクエストフォージェリだっけか 立派な攻撃だな
0411nobodyさん2012/01/07(土) 12:10:25.69ID:???
>>408
おまえ自分がどんだけアホなこと言ってるか理解しておいたほうがいいぞ
人を殺して「だって包丁が売ってるじゃないですか、たまたま刺したのが人だっただけで」って言ってるようなもん
しねよ
04123492012/01/07(土) 12:16:16.48ID:???
>>411
じゃあfile_get_contentsってどういう時に使うんですか?
自サイトから引っ張ってくるなら意味ないじゃないですか。
俺はその包丁で野菜を切ろうとしてるだけです。
0413nobodyさん2012/01/07(土) 12:16:44.23ID:???
さあ電波度が高まってまいりました
0414nobodyさん2012/01/07(土) 12:17:43.01ID:???
>>412
他人の畑の野菜をな
0415nobodyさん2012/01/07(土) 12:20:07.13ID:???
>>412
>>414
おまわりさんこっちです>>412こいつです!
0416nobodyさん2012/01/07(土) 12:23:26.07ID:???
file_get_contentsでデータ持ってきたら逮捕w
0417nobodyさん2012/01/07(土) 12:23:50.00ID:???
岡崎図書館事件もびっくりだな
0418nobodyさん2012/01/07(土) 12:26:09.14ID:???
おまえら中国人とかわらねぇ
0419nobodyさん2012/01/07(土) 12:29:52.34ID:???
>>417
あれは可愛そうだた 営業力のない技術者はただの道具になるしかないらしい
04203492012/01/07(土) 12:31:05.88ID:???
まじですか。
ブラウザでアクセスすれば普通に表示されるものをphpで取得することっておまわりさん呼ばれちゃうレベルなんですか?
ブラウザでも取得してますが。
ま、それを二次利用してこっちが儲けようとしてるんなら叩かれてもしょうがないですけど、
非公開localhost俺サイト用なんで前向きに質問しました。
スレ汚しごめんなさい。>>406さん、あんがとやんした。
0421nobodyさん2012/01/07(土) 12:41:07.87ID:???
いやおまわりさんはネタだろw
0422nobodyさん2012/01/07(土) 12:41:50.25ID:???
JavaScript使うサイトは、クライアント側の負荷が高くなる訳で、HTMLだけのクローラーよりアクセス増やしにくいが。
0423nobodyさん2012/01/07(土) 12:48:49.79ID:???
人の畑の野菜を勝手に刻んで包丁はそのためにあるんでしょ?と開き直る小僧
プログラマにもなれずプログラマのフリをしてトンチンカンな事を垂れ流し続ける人生詰んだおっさん
このスレレベル高すぎだろ
0424nobodyさん2012/01/07(土) 12:50:56.45ID:???
どれがどれに対するツッコミかよくわからんから
誰か一連まとめてくれ
0425nobodyさん2012/01/07(土) 13:01:24.02ID:???
>>424
荒らしVS暇人で遊んでただけだ 気にしなくていいと思う
0426nobodyさん2012/01/07(土) 13:17:09.06ID:4WAxjW+f
質問させてください

PHP + MySQLで初心者らしくWEB投票を作っています
しかしながらF5とか投票ボタンを連打するといくつもカウントされてしまいます
どうしたらF5攻撃を避けられるでしょうか?よろしくお願いします
0427nobodyさん2012/01/07(土) 13:27:40.64ID:???
それだけきっちりカウントされてるならよくできてる証拠だ
0428nobodyさん2012/01/07(土) 13:30:43.65ID:???
>>426
PHP + MySQLってことなんでその範囲で
とりあえずMySQLは目的に関係ない
PHPでCookieを使うかSESSIONを使え
1回目の投稿で投稿日時を保存
2回目の投稿の時に前の投稿から一定時間が経過していない場合はエラーを返すかDBに登録しない

教えてやったからコーラ買ってこいよ
0429nobodyさん2012/01/07(土) 13:32:01.36ID:???
IPやクッキーや携帯固有番号とかつかえ
0430nobodyさん2012/01/07(土) 13:39:14.31ID:???
>>384
ありがとうございます。
0431nobodyさん2012/01/07(土) 13:44:51.23ID:???
このPHPソースで情報とれたぞ。
このサイトで実験した。

http://gogomo.site90.net/

<?php
$ip = getenv("REMOTE_ADDR");
$host = getenv("REMOTE_HOST");
if ($host == null || $host == $ip) $host = gethostbyaddr($ip);
echo "IP = $ip</br>\n";
echo "HOST = $host</br>\n";
?>
0432nobodyさん2012/01/07(土) 13:53:19.27ID:???
またおっさん頓珍漢なこと書いてるし
マジで頭おかしいんじゃねーの
0433nobodyさん2012/01/07(土) 14:06:41.50ID:4WAxjW+f
>>428-429
ありがとうございます
しかしながら投稿時間とIPアドレスを保存して一定時間経過してない場合はエラーを返して終了する処理をしても多重投票されてしまいます。
国内サーバーの場合は問題ないのですが海外サーバーの場合レスポンスが遅いのでそれが原因でしょうか?
0434nobodyさん2012/01/07(土) 14:13:32.73ID:???
ソース晒したら問題に答えるよ
0435nobodyさん2012/01/07(土) 14:20:46.31ID:???
ただのPC向けサイトだったら

session_start();

$delay = 120; // 120秒制限

if($_SERVER['REQUEST_TIME'] - $_SESSION['posttime'] < $delay) {
echo '120秒の間隔をあけてくださいね';
exit;
}

// 初回もしくは120秒以上経過している
$_SESSION['posttime'] = $_SERVER['REQUEST_TIME'];
# ここでDBに投入
echo '投票しました';

こんだけ
コーラ買ってこいよ
0436nobodyさん2012/01/07(土) 14:33:49.61ID:???
sessionだとブラウザ再起動で再投票できてしまうかもな
ボット避けにimgタグでcookie食わせるのもいいかもね
あと 焼きそばパン買って来い
0437nobodyさん2012/01/07(土) 14:37:49.94ID:???
sessionを拒否してる場合は連投できるけど、初心者の習作だと思ってそこは説明しなかった
ややこしくなるだけだし
0438nobodyさん2012/01/07(土) 14:40:19.64ID:???
ソース無い時点で丸投げか釣り
まともに答える必要はない
0439nobodyさん2012/01/07(土) 15:25:05.07ID:4WAxjW+f
>>435
ありがとう。しかしながら

>>436-437
なるほど、sessionは使ってはいけないのですね
DBに投票時間とIPアドレス保存してそれをチェックが普通ですよね?

>>438
恥ずかしながらソース晒します笑わないでください
0440nobodyさん2012/01/07(土) 15:27:18.81ID:4WAxjW+f
ソースです

$regtime = time();
$ip = GETENV("REMOTE_ADDR");

# テーブルロック
$sql = "LOCK TABLES touhyou WRITE";
$rst = mysql_query($sql,$con);

# 多重投票チェック
$delay = time() - 10;
$sql = "SELECT * FROM touhyou WHERE (regtime > '$delay') AND (ip = '$ip')";
$rst = mysql_query($sql,$con);
$rec = mysql_num_rows($rst);
if($rec){ errorpage("多重投票禁止"); exit(); }

# 投票
$sql = "UPDATE touhyou SET count = ifnull(count,0) + 1,regtime = '$regtime',ip = '$ip' WHERE (code = '$code')";
$rst = mysql_query($sql,$con);

# テーブルロック解除
$sql = "UNLOCK TABLES";
$rst = mysql_query($sql,$con);
0441nobodyさん2012/01/07(土) 15:34:21.95ID:???
>>440
438じゃないけど
regtimeと$delayの比較が逆じゃない?

あとそのロジックだと1codeにregtimeとIPが1つずつしかないから
違うIPの人が交互に投票すれば制限なくなりそうだけど
0442nobodyさん2012/01/07(土) 15:36:45.34ID:???
あごめん、引っかかったらエラーだからいいのか。
0443nobodyさん2012/01/07(土) 15:47:58.06ID:4WAxjW+f
>>441
ありがとうございます
IPアドレスと投票時間だけのテーブルを別途作りました
これで多重投票はできない?

# 多重投票チェック
$delay = time() - 10;
$sql = "SELECT * FROM ipaddress WHERE (regtime > '$delay') AND (ip = '$ip')";
$rst = mysql_query($sql,$con);
$rec = mysql_num_rows($rst);
if($rec){ errorpage("多重投票禁止"); exit(); }

# テーブルロック
$sql = "LOCK TABLES touhyou WRITE";
$rst = mysql_query($sql,$con);

# IPアドレス追加
$sql = "INSERT INTO ipaddress (regtime,ip) values ('$regtime','$ip')";
$rst = mysql_query($sql,$con);

# 投票
$sql = "UPDATE touhyou SET count = ifnull(count,0) + 1 WHERE (code = '$code')";
$rst = mysql_query($sql,$con);

# テーブルロック解除
$sql = "UNLOCK TABLES";
$rst = mysql_query($sql,$con);
0444nobodyさん2012/01/07(土) 15:54:48.70ID:???
>>443
440のソースでやってみたらF5連打しても多重投票されなかったけど
0445nobodyさん2012/01/07(土) 15:56:38.23ID:???
ipだけ記録して24時間毎にデータベースを初期化すれば良い。
0446nobodyさん2012/01/07(土) 15:57:13.89ID:???
>>445
それだと初期化する1分前に投票して初期化後にまた投票できるぞ
0447nobodyさん2012/01/07(土) 16:00:43.57ID:???
いつ初期化されるのか確認するやつもいないだろ。
サーバーの処理が少ない方がいいんだ。
1分後に投票できたとしても次にできるまで24時間かかる。大した不正にならない。
0448nobodyさん2012/01/07(土) 16:33:03.74ID:4WAxjW+f
>>444
はい自宅の環境でも問題なかったです
しかしながら海外のレスポンス遅いサーバーでやると多重投票されてしまうのです

>>445-447も上と同じだと思います

テーブルロックするタイミングとか問題なのかな?と思っているのですがよくわかりません
0449nobodyさん2012/01/07(土) 16:54:16.52ID:???
>>448
そういうことなんで先に言わないの?
0450nobodyさん2012/01/07(土) 17:18:09.00ID:???
センスないなー

テーブルを
ip(IP入れる) post(投票IDを入れる)
ipがプライマリーキー

# 投票
INSERT IGNORE INTO tableName (ip,post) VALUES ($ip, $postid);

# 投票結果集計
SELECT COUNT(ip) AS n FROM tableName WHERE post=?;

これだけでいいじゃん
0451nobodyさん2012/01/07(土) 17:28:01.88ID:???
ちなみに>>450だとそのテーブルは投票イベントごとのテーブルね
1つのテーブルで何回も投票イベントを管理する場合はプライマリキーを組み合わせたり工夫すること

さっさとコーラ買ってこいよ
さっきから待ってんだけど
0452nobodyさん2012/01/07(土) 17:46:08.75ID:???
さらに付け加えておくと
1つのレコードを不特定多数のユーザーがupdateかけるような設計は最低だから覚えといてね

カレーパン追加な
0453nobodyさん2012/01/07(土) 18:02:56.85ID:???
同時アクセスの問題を処理するためのデータベースだろう。
あとテーブルのロックは不要だろ。それを命令することで不具合でないか?
それって一気に更新するトランザクション処理するとき用だろ。
0454nobodyさん2012/01/07(土) 18:08:29.88ID:???
データベースは同時アクセス来ても待ち行列にいれて順に処理するから問題でないはずだろう。
調べてみたらロック命令が付いてるほうが特殊で、SQLiteだとトランザクションモードに入ったら勝手にロックがかかって他所から更新できないようだぞ。


http://www.advancesoft.co.jp/wiki/?SQLite-LOCK-CHECK
接続Aでトランザクションが開始されている時に接続BでもINSERTを実行すると「SQL error: database is locked」とエラーになります。
0455nobodyさん2012/01/07(土) 18:13:41.39ID:???
便利なやつ作ったよ。SQLite(PDO)を使ったMap。
これでデータベースを意識しないでデータベースを利用できる。
このサイトではPDOは動かずSQLITE2は動くようだがそれに対応するのは後回しにする。

http://ideone.com/DmggH
0456nobodyさん2012/01/07(土) 18:20:31.25ID:???
だから>>450で済むだろーが
トランザクションかんけーねーしテーブルロックいらねーし
0457nobodyさん2012/01/07(土) 18:22:54.07ID:???
>>455
なんだこのクソみたいなソース
よく恥ずかしげもなくこんなもん晒せるな
0458nobodyさん2012/01/07(土) 18:27:53.31ID:???
ブルックスの法則だな
人脳を連結しても処理速度は上がらない が 出力が多様化する
0459nobodyさん2012/01/07(土) 19:53:46.80ID:4WAxjW+f
>>450
1つのIPで(何分待っても)1回しか投票できないってことですか?
うーん、よくわからないです
0460nobodyさん2012/01/07(土) 19:59:52.15ID:???
>>459
>1つのIPで(何分待っても)1回しか投票できないってことですか?
そう
もし何回でも投票可能にしたいならまた他の方法になる

いずれにしても1レコードを不特定多数ユーザーでupdateかける設計はウンコなのでそこは考えなおす
そんな設計してたらオレならリストラ候補の先頭に登録しとく
0461nobodyさん2012/01/07(土) 20:11:43.08ID:???
仕様の打ち合わせからとかw
0462nobodyさん2012/01/07(土) 20:39:54.59ID:???
どうせだから最強のアクセスカウンタ作ろうぜ
攻性防壁付きでステマをゲイツ砲で火達磨にしようぜ
0463nobodyさん2012/01/07(土) 20:41:38.53ID:???
正確にカウントするには、取得できたIPだけの判定ではダメ。
携帯やプロキシやモデム再起動に対応しないと同じ人が何度も投稿できる。
0464nobodyさん2012/01/07(土) 20:43:16.13ID:???
>>459
ルータ再起動でアドレス変わるから何度でも投票できます
0465nobodyさん2012/01/07(土) 20:49:07.13ID:???
大阪市長選やAKB総選挙など不正が一大事になるようなものに対応できるようにするんだ。
IDとパスワードで認証すれば1度しかできないことは確定するが、そういう手間の掛かる認証はないの方向で。
0466nobodyさん2012/01/07(土) 21:00:48.87ID:???
>>465
選挙だと同じ回線で複数の有権者の投票が考えられる たとえば2世帯住宅とか
IDパスワードより手軽というと生体認証となる が インフラ整備が大変そう
今 生体認証の変換で思いついたんだが VoIPで声帯認証ってどうだろか
0467nobodyさん2012/01/07(土) 21:08:38.36ID:???
馬鹿の考え休むに似たり
認証うんぬん言ってる奴は他所でやれ
0468nobodyさん2012/01/07(土) 21:31:52.64ID:???
だな
0469nobodyさん2012/01/07(土) 21:34:52.36ID:???
おい>>450 おまえがIP認証のコードなんか書くから>>467が怒ってるぞ ちゃんとあやまっとけよ
0470nobodyさん2012/01/07(土) 21:59:58.40ID:???
IPアドレス
0471nobodyさん2012/01/07(土) 22:01:22.84ID:???
PHPer、レベル低くっ!
なんだこのスレ。
0472nobodyさん2012/01/07(土) 22:01:37.59ID:???
>>455を利用して、プロキシチェックとアクセス数のカウントしてみた。

サイト
http://gogomo.site90.net/
ソース
http://ideone.com/aDkpu
0473nobodyさん2012/01/07(土) 22:18:10.36ID:???
また人生詰んだプログラマにもなれなかったおっさんが一人で暴れてるな
0474nobodyさん2012/01/07(土) 22:18:31.53ID:???
>>472はここの公開プロキシを判定できずすり抜けてしまったよ。

http://www.cybersyndrome.net/
0475nobodyさん2012/01/07(土) 22:29:20.11ID:???
ここも抜けられた。直IPとは違ってるから設定ミスはない。


http://taruo.net/e/
総合評価:?(A 以上 or 生 IP。下記参照) 疑惑 0%:proxy の兆候は全く見られません。


http://fula.jp/cgi-bin/env/
総合判定 直接アクセスされているか、プロクシなら匿名での接続を確認しました。プロクシの可能性は低いです。
0476nobodyさん2012/01/07(土) 22:34:40.92ID:???
2chのプロキシチェッカーは強力だった。突破できず。この精度まで持って行けないと不正を防げないなあ。


ERROR:公開PROXYからの投稿は受け付けていません!!
0477nobodyさん2012/01/07(土) 22:39:41.39ID:???
>>449
>>433
0478nobodyさん2012/01/07(土) 22:40:59.21ID:???
mixiとかの、ページがグーグル、ヤフーなどの検索サービスで
引っかからない仕様はphpっでどうやるのですか?
0479nobodyさん2012/01/07(土) 22:42:14.56ID:???
ロボットにクロールさせない命令出してるか、ログイン必須サイト。
0480nobodyさん2012/01/07(土) 22:46:10.95ID:???
BBQ使えば
0481nobodyさん2012/01/07(土) 22:48:27.79ID:???
2chのチェッカーって一般人も使えるのか。今知った。
0482nobodyさん2012/01/07(土) 22:48:37.01ID:qev3DgRj
abstractとinterfaceとtraitはどんな風に使い分ければいいですか?
0483nobodyさん2012/01/07(土) 23:10:52.85ID:???
niku.2ch.netか
2shレベルの串規制だと簡単な投票には使えそうだな
0484nobodyさん2012/01/07(土) 23:11:07.59ID:???
>>482
全然違うもんだろ。基礎勉強すれ。
0485nobodyさん2012/01/07(土) 23:11:50.13ID:???
レベル低すぎ。
0486nobodyさん2012/01/07(土) 23:18:01.62ID:???
>>484
分かんないならレスしないでもらえます?
0487nobodyさん2012/01/07(土) 23:19:40.32ID:???
キーワードでしか語れないニートのオッサンか。
具体的に細かいとこ突っ込んだらすぐにボロを出して、顔真っ赤にして釣り宣言して逃亡するのがオチだろ。
0488nobodyさん2012/01/07(土) 23:37:41.72ID:???
おっさんはそろそろブログでやるといいと思うぞ
もしかしたらファンがつくかもよ
アフィ貼ったら収入に!

もしくは早めに諦めて吊ったほうがいい
0489nobodyさん2012/01/08(日) 00:47:02.84ID:???
>>482
class と interface は型の定義手段
abstract class と trait は差分プログラミングという名の手抜き手段の一つ
0490nobodyさん2012/01/08(日) 00:52:14.60ID:5w8ZM1Tv
capthca 使うとかですかね?
0491nobodyさん2012/01/08(日) 00:53:12.04ID:5w8ZM1Tv
captchaだった。。。
0492nobodyさん2012/01/08(日) 11:20:03.75ID:phv4PYdF
PHPでアプリケーションスコープはどのように実装すればよろしいでしょうか?
0493nobodyさん2012/01/08(日) 13:14:37.31ID:???
あきた
0494nobodyさん2012/01/08(日) 13:27:05.48ID:???
無限ループってこわいよね
0495nobodyさん2012/01/08(日) 13:40:15.60ID:???
まぁもうそろそろ吊る予定だろうから最期くらい多少好きにさせてあげなよ
0496nobodyさん2012/01/08(日) 15:39:24.13ID:???
なんだこのスレ。
0497nobodyさん2012/01/08(日) 17:49:54.61ID:???
何故動かないんだ、っとよく見たら$が抜けてる。
変数に$つけるのって忘れない? php歴2年目のオレが言ってみる。
0498nobodyさん2012/01/08(日) 18:16:51.26ID:???
ASやJS弄った後にPHP使うとたまに忘れる
0499nobodyさん2012/01/08(日) 18:54:15.86ID:???
変数の後ろに$付けちゃうことない?
0500nobodyさん2012/01/08(日) 19:06:00.92ID:???
$this->$dataみたいに余計に$つけてエラーになる
0501nobodyさん2012/01/08(日) 19:46:27.97ID:???
>>489
abstractとinterfaceの具体的な使い分けはどうしてますか?
実装が書きたかったらabstractっていうのはあまりにもアレなので
哲学とまでは言いませんが、確固たる理由をつけて使い分けたいんです
0502nobodyさん2012/01/08(日) 19:49:55.78ID:???
確固たる理由が2chのカキコとかw
0503nobodyさん2012/01/08(日) 20:09:47.40ID:???
>>502
分かんないならレスしないでもらえます?
0504nobodyさん2012/01/08(日) 20:16:41.16ID:???
>>501
>>1
0505nobodyさん2012/01/08(日) 22:55:18.22ID:???
PHPでできないことはJavaでできる
JavaでできないことはPHPでできる
一長一短だな
0506nobodyさん2012/01/08(日) 23:48:20.26ID:???
PHPでできることはJavaでもできる
JavaでできることはPHPではできないかもしれない
0507nobodyさん2012/01/08(日) 23:54:20.13ID:???
>>506
Javaってインタプリタで動作させることできるん?
■ このスレッドは過去ログ倉庫に格納されています