【PHP】下らねぇ質問はID出して書き込みやがれ 114
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2012/01/02(月) 02:03:25.50ID:???過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0428nobodyさん
2012/01/07(土) 13:30:43.65ID:???PHP + MySQLってことなんでその範囲で
とりあえずMySQLは目的に関係ない
PHPでCookieを使うかSESSIONを使え
1回目の投稿で投稿日時を保存
2回目の投稿の時に前の投稿から一定時間が経過していない場合はエラーを返すかDBに登録しない
教えてやったからコーラ買ってこいよ
0429nobodyさん
2012/01/07(土) 13:32:01.36ID:???0431nobodyさん
2012/01/07(土) 13:44:51.23ID:???このサイトで実験した。
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ありがとうございます
しかしながら投稿時間とIPアドレスを保存して一定時間経過してない場合はエラーを返して終了する処理をしても多重投票されてしまいます。
国内サーバーの場合は問題ないのですが海外サーバーの場合レスポンスが遅いのでそれが原因でしょうか?
0434nobodyさん
2012/01/07(土) 14:13:32.73ID:???0435nobodyさん
2012/01/07(土) 14:20:46.31ID:???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:???ボット避けにimgタグでcookie食わせるのもいいかもね
あと 焼きそばパン買って来い
0437nobodyさん
2012/01/07(土) 14:37:49.94ID:???ややこしくなるだけだし
0438nobodyさん
2012/01/07(土) 14:40:19.64ID:???まともに答える必要はない
0439nobodyさん
2012/01/07(土) 15:25:05.07ID:4WAxjW+fありがとう。しかしながら
>>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:???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ありがとうございます
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);
0445nobodyさん
2012/01/07(土) 15:56:38.23ID:???0447nobodyさん
2012/01/07(土) 16:00:43.57ID:???サーバーの処理が少ない方がいいんだ。
1分後に投票できたとしても次にできるまで24時間かかる。大した不正にならない。
0448nobodyさん
2012/01/07(土) 16:33:03.74ID:4WAxjW+fはい自宅の環境でも問題なかったです
しかしながら海外のレスポンス遅いサーバーでやると多重投票されてしまうのです
>>445-447も上と同じだと思います
テーブルロックするタイミングとか問題なのかな?と思っているのですがよくわかりません
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:???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:???これでデータベースを意識しないでデータベースを利用できる。
このサイトではPDOは動かずSQLITE2は動くようだがそれに対応するのは後回しにする。
http://ideone.com/DmggH
0458nobodyさん
2012/01/07(土) 18:27:53.31ID:???人脳を連結しても処理速度は上がらない が 出力が多様化する
0459nobodyさん
2012/01/07(土) 19:53:46.80ID:4WAxjW+f1つのIPで(何分待っても)1回しか投票できないってことですか?
うーん、よくわからないです
0460nobodyさん
2012/01/07(土) 19:59:52.15ID:???>1つのIPで(何分待っても)1回しか投票できないってことですか?
そう
もし何回でも投票可能にしたいならまた他の方法になる
いずれにしても1レコードを不特定多数ユーザーでupdateかける設計はウンコなのでそこは考えなおす
そんな設計してたらオレならリストラ候補の先頭に登録しとく
0461nobodyさん
2012/01/07(土) 20:11:43.08ID:???0462nobodyさん
2012/01/07(土) 20:39:54.59ID:???攻性防壁付きでステマをゲイツ砲で火達磨にしようぜ
0463nobodyさん
2012/01/07(土) 20:41:38.53ID:???携帯やプロキシやモデム再起動に対応しないと同じ人が何度も投稿できる。
0465nobodyさん
2012/01/07(土) 20:49:07.13ID:???IDとパスワードで認証すれば1度しかできないことは確定するが、そういう手間の掛かる認証はないの方向で。
0466nobodyさん
2012/01/07(土) 21:00:48.87ID:???選挙だと同じ回線で複数の有権者の投票が考えられる たとえば2世帯住宅とか
IDパスワードより手軽というと生体認証となる が インフラ整備が大変そう
今 生体認証の変換で思いついたんだが VoIPで声帯認証ってどうだろか
0467nobodyさん
2012/01/07(土) 21:08:38.36ID:???認証うんぬん言ってる奴は他所でやれ
0468nobodyさん
2012/01/07(土) 21:31:52.64ID:???0470nobodyさん
2012/01/07(土) 21:59:58.40ID:???0471nobodyさん
2012/01/07(土) 22:01:22.84ID:???なんだこのスレ。
0472nobodyさん
2012/01/07(土) 22:01:37.59ID:???サイト
http://gogomo.site90.net/
ソース
http://ideone.com/aDkpu
0473nobodyさん
2012/01/07(土) 22:18:10.36ID:???0474nobodyさん
2012/01/07(土) 22:18:31.53ID:???http://www.cybersyndrome.net/
0475nobodyさん
2012/01/07(土) 22:29:20.11ID:???http://taruo.net/e/
総合評価:?(A 以上 or 生 IP。下記参照) 疑惑 0%:proxy の兆候は全く見られません。
http://fula.jp/cgi-bin/env/
総合判定 直接アクセスされているか、プロクシなら匿名での接続を確認しました。プロクシの可能性は低いです。
0476nobodyさん
2012/01/07(土) 22:34:40.92ID:???ERROR:公開PROXYからの投稿は受け付けていません!!
0478nobodyさん
2012/01/07(土) 22:40:59.21ID:???引っかからない仕様はphpっでどうやるのですか?
0479nobodyさん
2012/01/07(土) 22:42:14.56ID:???0480nobodyさん
2012/01/07(土) 22:46:10.95ID:???0481nobodyさん
2012/01/07(土) 22:48:27.79ID:???0482nobodyさん
2012/01/07(土) 22:48:37.01ID:qev3DgRj0483nobodyさん
2012/01/07(土) 23:10:52.85ID:???2shレベルの串規制だと簡単な投票には使えそうだな
0485nobodyさん
2012/01/07(土) 23:11:50.13ID:???0487nobodyさん
2012/01/07(土) 23:19:40.32ID:???具体的に細かいとこ突っ込んだらすぐにボロを出して、顔真っ赤にして釣り宣言して逃亡するのがオチだろ。
0488nobodyさん
2012/01/07(土) 23:37:41.72ID:???もしかしたらファンがつくかもよ
アフィ貼ったら収入に!
もしくは早めに諦めて吊ったほうがいい
0489nobodyさん
2012/01/08(日) 00:47:02.84ID:???class と interface は型の定義手段
abstract class と trait は差分プログラミングという名の手抜き手段の一つ
0490nobodyさん
2012/01/08(日) 00:52:14.60ID:5w8ZM1Tv0491nobodyさん
2012/01/08(日) 00:53:12.04ID:5w8ZM1Tv0492nobodyさん
2012/01/08(日) 11:20:03.75ID:phv4PYdF0493nobodyさん
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:???0499nobodyさん
2012/01/08(日) 18:54:15.86ID:???0500nobodyさん
2012/01/08(日) 19:06:00.92ID:???0501nobodyさん
2012/01/08(日) 19:46:27.97ID:???abstractとinterfaceの具体的な使い分けはどうしてますか?
実装が書きたかったらabstractっていうのはあまりにもアレなので
哲学とまでは言いませんが、確固たる理由をつけて使い分けたいんです
0502nobodyさん
2012/01/08(日) 19:49:55.78ID:???0505nobodyさん
2012/01/08(日) 22:55:18.22ID:???JavaでできないことはPHPでできる
一長一短だな
0506nobodyさん
2012/01/08(日) 23:48:20.26ID:???JavaでできることはPHPではできないかもしれない
0508nobodyさん
2012/01/08(日) 23:56:40.83ID:???PHPでJavaは実装できない。
0510nobodyさん
2012/01/09(月) 00:07:08.56ID:???当たり前だが、
Javaで実装されたPHPで可能。
最終的にJavaのクラスに変換されるので
ちょっと違うがmod_phpよりも早いよ。
0511nobodyさん
2012/01/09(月) 00:58:52.24ID:???0513nobodyさん
2012/01/09(月) 01:14:15.07ID:???Javaで実装されたPHPはすでにあるから。
Quercus
http://www.caucho.com/resin-3.0/quercus/
WordPressなんかで試してみたら?
とかJavaで実装されることは別に珍しい話じゃないと思うけど。
PHPで実装された言語は知らないけど、
Javaで実装された言語だったら他にもあるじゃん。
JRubyとかJython、Rhinoとか。
0514nobodyさん
2012/01/09(月) 01:17:33.12ID:???変な対抗意識を持つ前に両方を
経験してみたらいいかがだろうか?
0515nobodyさん
2012/01/09(月) 01:18:12.56ID:???Java と PHP そのものでできる・できないの話なのに
0516nobodyさん
2012/01/09(月) 01:20:20.67ID:???こっちに詳しく書いてあるから、勉強してね。
http://quercus.caucho.com/quercus-3.1/doc/quercus.xtp
0517nobodyさん
2012/01/09(月) 01:23:11.79ID:???変なこと書いているけど
Javaで実装されたphpではJavaとして最終的に動く。
メリットは以下のとおり(公式サイトより)。
Security: since Quercus and its modules are entirely in Java, C pointer overruns and segmentation violations are no longer possible.
Scalability: PHP programs can take advantage of distributed sessions in PHP and load balancing.
Performance: Quercus outperforms a straight mod_php implementation by about 4x (for Mediawiki and Drupal). Quercus roughly matches PHP performance with accelerators like APC.
Caching: PHP applications using Quercus can immediately take advantage of Resin's proxy caching. They can also use the PHP APC caching API since the APC functions are included with Quercus.
Connection pooling, transactions, JMS: PHP programs using Quercus automatically take advantage of Resin's connection pooling, and can use the full distributation transactions, and Java capabilities like JMS.
Java tools: PHP developers can use Java tools like profilers to get in-depth information about the PHP program performance.
0518nobodyさん
2012/01/09(月) 01:27:24.62ID:???PHPはC言語やJavaで実装されているわけでしょ?
ということはPHPでできることはCやJavaでできるでしょ?
逆は無理の場合が多いことは想像つくでしょ?
0520nobodyさん
2012/01/09(月) 01:36:42.65ID:???横レスで悪いが、
たとえば、PHPはC言語で実装されているのに、
PHPはC言語よりも優れているのですか?実装元よりも優れるのですか?
便宜上優れることはあってもパフォーマンスで優れることはないよ。
0521nobodyさん
2012/01/09(月) 01:40:05.31ID:???0522nobodyさん
2012/01/09(月) 01:45:46.42ID:???パフォーマンス上はマシン語が最高です。
>>515
C言語で実装されたPHPでC言語を実装し、
PHPで実装されたC言語でPHPを実装する・・・無限ループ
最高か?wwww
やっぱりこのスレ、次元低すぎ。
0524nobodyさん
2012/01/09(月) 02:00:28.99ID:???perl/phpが普及したのには理由がある
0525nobodyさん
2012/01/09(月) 02:08:44.11ID:???0526nobodyさん
2012/01/09(月) 02:09:01.17ID:???あなたの一生涯をかけてphpでJavaを実装します?
C言語で実装されたphpでJava仮想マシンとJava言語を構築、
phpで構築されたJava仮想マシン上でJavaで実装されたphpが動き、
Java仮想マシン上で動くphpでさらにJava仮想マシンを動かすわけですか。
またmod_phpとしてAndroidやユニバーサルなV2CやEclipseみたいな
デスクトップアプリまでとして動いちゃったりするんですか?
>>524
それはすべてのプログラミング言語に当てはまるから議論にならない。
でなきゃすべてマシン語で書けということになる。
いや愉快だな。
0527nobodyさん
2012/01/09(月) 02:11:31.73ID:???こんな議論は時間のムダ。
0528nobodyさん
2012/01/09(月) 02:12:57.81ID:???phpのソースではなくjavaのソースをね
■ このスレッドは過去ログ倉庫に格納されています