【PHP】下らねぇ質問はID出して書き込みやがれ 103
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/01/25(火) 20:46:58ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 102
http://hibari.2ch.net/test/read.cgi/php/1292670453/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ 出来るだけスレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・IDを出さない場合、偽者や成りすましの出現を覚悟すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に極力IDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0521nobodyさん
2011/02/05(土) 18:37:58ID:???0525nobodyさん
2011/02/06(日) 00:13:45ID:???0526nobodyさん
2011/02/06(日) 00:49:02ID:???0527nobodyさん
2011/02/06(日) 01:19:10ID:???0528nobodyさん
2011/02/06(日) 01:27:20ID:???【PHP】下らねぇ質問はID出さずに書き込みやがれ 1
http://hibari.2ch.net/test/read.cgi/php/1289117484/l50
0530nobodyさん
2011/02/06(日) 03:57:06ID:RrdA9rdHHTMLでフォームを作ってラジオボタンのvalue値に1(グー),2(チョキ),3(パー)
を設定し、PHP側でPCが出す手を以下のようにして、設定してます。
$pc_hand[1] = "グー";
$pc_hand[2] = "チョキ";
$pc_hand[3] = "パー";
$r = time()%3;
$pc_hand[r]
とやってます。問題なのは、pc_handの出した手とユーザーが選んだ手の勝敗を
どう判定すればいいのかわからないというところです。
日本語が少しおかしいですが、PHP初心者なので何卒お力を貸してください
0531nobodyさん
2011/02/06(日) 04:35:28ID:???そもそもPHPでやることじゃない
JSで作ればいい
古い携帯向けってなら仕方ないが
じゃんけんなんて調べればいくらでもでてくるだろ
乱数はtime()%3じゃなくmt_rand()使え
$jankenMap = array(
0 => 'グー',
1 => 'チョキ',
2 => 'パー'
);
$usr = $_POST['usr'];
$com = mt_rand(0, 2);
printf('usr: %s, com: %s<br/>', $jankenMap[$usr], $jankenMap[$com]);
$ret = ($usr - $com + 3) % 3;
switch ($ret) {
case 0: echo 'あいこ'; break;
case 1: echo 'usrの負け'; break;
case 2: echo 'usrの勝ち'; break;
}
じゃんけん程度のマップならif文でいいが
もっと手が増えたゲームならビット演算すればいい
確認してないから知らん
0532nobodyさん
2011/02/06(日) 04:51:23ID:???俺にはこういうのが思いつけない
0534nobodyさん
2011/02/06(日) 05:04:16ID:RrdA9rdH質問させていただいたものです。
なぜ、3を加算し、その後で3で割った剰余をとるのでしょうか?
0535nobodyさん
2011/02/06(日) 06:13:18ID:???$usr:0〜2 なのを +3 して $usr:3〜5 にしておく。
そこから $com:0〜2 を引いてmod3を求めれば必ず0〜2の範囲に収まるよね。
まぁ他にも色々方法はあるだろうけど。
0536nobodyさん
2011/02/06(日) 06:17:31ID:???0537nobodyさん
2011/02/06(日) 06:38:12ID:???-1 mod 3 の計算結果は-1もしくは2になる。
PHPで -1 % 3 を計算すると結果は -1 になる。(Perlとかだと2かも)
なので3を加算してからmod3すれば希望する結果が得られる。
例えば、
usr:0(グー) com:1(チョキ)→ (0-1+3)%3=2(usrの勝ち)
usr:1(チョキ) com:0(グー)→ (1-0+3)%3=1(usrの負け)
0538531
2011/02/06(日) 07:33:08ID:???補足サンクス
その通りの考えだったわけ
>>536
XSSはできなくもないけど配列のキーだから何もしなかった
$jankenMap[$_POST['usr']] がNOTICE出す程度で
array_key_exists あたりで調べればいいんじゃない
0540nobodyさん
2011/02/06(日) 10:22:01ID:sg+1m/iV0541nobodyさん
2011/02/06(日) 10:42:37ID:???今回の例ならXSSの心配は無いでしょ。
不安なら
$usr = $_POST['usr'] + 0;
とか
if($usr < 0 || $usr > 2) $usr = 0;
とでもしておけばいい。
0542nobodyさん
2011/02/06(日) 10:45:07ID:W4hAX9yk海の幸も山の幸も♪&lt;br&gt;「北海道産食材にこだわる濃厚塩ちゃんこ鍋コース」&lt;br&gt;刺身6点盛りも付いた全6品、5,500円が2,500円に!
といった、lt;br&gtの表示が見えるようにソース表示をするのはどうやればできるのでしょうか?
できればブラウザで見たいなと思っているのですが、htmlspecialcharsの反対をするような関数を
探しているのですが勘違いしているような気もします。
アドバイスいただければm(_ _)m
0543nobodyさん
2011/02/06(日) 10:46:04ID:???0544nobodyさん
2011/02/06(日) 10:52:17ID:sg+1m/iVここ見てこう書いてあったもので・・・
ttp://d.hatena.ne.jp/keyword/%C9%E4%B9%E6
>>536と>>538でXSS可能と書かれてますがマイナス記号でXSS出来るのは初めて聞いたので本当に可能なのか知りたいわけです
0546nobodyさん
2011/02/06(日) 11:12:30ID:???普通にブラウザでソースを表示すればいいじゃん。
ブラウザ上で確認のために&gt;ってそのまま表示させたいのなら
echo(htmlspecialchars($item['catchcopy']));
0547nobodyさん
2011/02/06(日) 11:18:56ID:sg+1m/iV今再現できましたが531氏のスクリプトではエラーが表示されるサイトではXSSになりますね
0549nobodyさん
2011/02/06(日) 11:25:19ID:???サーバでエラーが表示できる環境でXSSを引き起こすコード書けば簡単に再現できますよ
0550nobodyさん
2011/02/06(日) 11:27:53ID:???なにをXSSと言うかの基準が人それぞれだと言う議論ですか?
こうした書き込みも質問だと受け取られてIDを出せと言われるんですか?
0552nobodyさん
2011/02/06(日) 11:29:18ID:???あのな。話が食い違ってんの。
>>531はじゃんけんの勝敗判定のアルゴリズムの説明してるだけで
XSSとか考慮してないだけだろ?
_POSTの処理のXSS対策とかは>>541に書いたように自分で勝手にやれ、って話。
0553nobodyさん
2011/02/06(日) 11:34:22ID:???0554nobodyさん
2011/02/06(日) 11:41:21ID:???お前ら親切だなw
0555nobodyさん
2011/02/06(日) 11:44:01ID:W4hAX9ykレスありがとうございます。
$url = 'http://allcoupon.jp/api-v1/coupon?output=json';
$items = file_get_contents($url);
$items = json_decode($items, true);
echo '<pre>';
var_dump($items);
echo '</pre>';
上記のリクエストで表示される、366番目のクーポンのタイトルでは、
下記のように改行されてしまっています。この改行をなくしたいです。
["coupon_title"]=>
string(173) "【東京23区内出張】独身から主婦まで!
『家事代行』「月4回のファーストプラン+交通費4回分」
通常52,000円が62%OFFの19,800円!"
そこで、ソース表示するために、下記を試しましたが改行ソースが見れないのです。。
$url = 'http://allcoupon.jp/api-v1/coupon?output=json';
$items = file_get_contents($url);
$items = json_decode($items, true);
foreach($items as $item){
echo(htmlspecialchars($item['coupon_title']));
//echo $title;
}
0556nobodyさん
2011/02/06(日) 11:44:31ID:???0557nobodyさん
2011/02/06(日) 11:53:01ID:???おもしれぇwwwwwwwwwwwwww
0558nobodyさん
2011/02/06(日) 11:55:29ID:???聞く気が無いなら巣に帰れ
0559nobodyさん
2011/02/06(日) 11:58:06ID:???元々のデータがそこで改行されてるからでしょ。
つまり、<br>が入ってるのではなく、文字列中に改行コードが入ってるってこと。
echo(htmlspecialchars(preg_replace('/[\n\r]/', '', $item['coupon_title'])));
0560nobodyさん
2011/02/06(日) 11:59:06ID:???0561nobodyさん
2011/02/06(日) 12:00:47ID:???0563nobodyさん
2011/02/06(日) 12:11:29ID:???さんざん既出なんだから気になるなら過去ログでも漁れよ
0564nobodyさん
2011/02/06(日) 12:15:47ID:???0565nobodyさん
2011/02/06(日) 12:18:00ID:???0566nobodyさん
2011/02/06(日) 12:22:52ID:W4hAX9ykありがとうございます!無事困っていた改行の問題が解決できました!
しかし、結局、 \n といった改行コードを表示させて、今後、同じような問題に
ぶち当たった時になにを変換したらいいかを調べられない状況です。
echo(htmlspecialchars(preg_replace('/[\n\r]/', '', $item['coupon_title']))); で確認すると
【東京23区内出張】独身から主婦まで!『家事代行』「月4回のファーストプラン+交通費4回分」通常52,000円が62%OFFの19,800円!
と表示されて、 \n などの改行コードを調べられないのです。。
0568nobodyさん
2011/02/06(日) 12:37:32ID:???改行コードが入っているのを確認したいということなら、
echo(htmlspecialchars(str_replace(array("\r\n","\r","\n"), array('\r\n','\r','\n'), $item['coupon_title'])));
とか。(ただし表示されるのはあくまで'\r\n'等という「文字列」であって、改行コードではないことに注意)
0569nobodyさん
2011/02/06(日) 12:38:11ID:W4hAX9ykわかりにくくて申し訳ないです。
改行を修正するという問題はやり方を教えていただいて解決したのですが、
改行に使われているコードをソース表示で目視して、しっかりとソースを確認できるようになりたいのです。
例えば、 \n\r で改行されているのか、&lt;br&gt だとか、自分で確認できれば今後、自力で変換する
ことができるだろうと思いまして。
0570nobodyさん
2011/02/06(日) 12:42:36ID:???改行コードは目で見えないから擬似的に確認するなら>>568みたいな方法しかないね。
でも文字として画面に表示されない文字コードは他にもたくさんあるから
どうしても気になるなら1文字ずつ文字コードを確認するしかないね。
0571nobodyさん
2011/02/06(日) 12:52:59ID:???0572nobodyさん
2011/02/06(日) 12:53:45ID:W4hAX9ykなるほど。どうもありがとうございます。
今回はこのスレで、改行されているのであれば、 \n\r を変換だとか &lt;br&gt を変換だろうと
教えてもらいましたが、ソース表示で確認するのは困難なので、予測してやるしかないのですね。
勉強になりましたm(_ _)m
0573nobodyさん
2011/02/06(日) 13:00:51ID:???ちなみに[\n\r]って書いたけど、普通はCR+LFだから\r\nの順ね。
システムによっては\rだけとか\nだけ(Linux等)なんかもあるからね。
0574nobodyさん
2011/02/06(日) 13:01:13ID:???バイナリが確認できるエディタぐらいは用意しなよ
<?php
header('Content-Type: text/plain;');
$data = file_get_contents('http://www.example.com');
for ($pos = 0, $length = strlen($data); $pos < $length; $pos += 16) {
$line = substr($data, $pos, 16);
printf("%08X : %s : %s\r\n", $pos, implode(' ', str_split(bin2hex($line), 2)), $line);
}
0575nobodyさん
2011/02/06(日) 13:16:57ID:???0577nobodyさん
2011/02/06(日) 14:33:00ID:Zx7Z1+IFこのとき取り出した5件も配列Aから取り除きたい。
この分割を一度に出来る関数は用意されてないですか?
配列B = array_slice(配列A, -5, 5);
array_splice(配列A, -5, 5);
ってやるしかない??
0579nobodyさん
2011/02/06(日) 14:45:05ID:???function orijinaru() {
配列B = array_slice(配列A, -5, 5);
array_splice(配列A, -5, 5);
}
0580nobodyさん
2011/02/06(日) 14:51:38ID:???トンクス
0581nobodyさん
2011/02/06(日) 15:36:47ID:5gbalayAyyyymmdd.txt(以下、日付は前日のものになります)を処理して、yyyymmdd.htmlを出力する、というものを作りたいです。
まずyyyymmdd.htmlが存在するか確認し、あればそのまま表示、なければ処理をするのですが、
普通にyyyymmdd.txtをファイルロックするだけだと、ロック中にアクセスしてきた人は
ロックが解除された後同じ処理をすることになり、無駄が出ます。
「ファイルがロックされていなかったら処理Aをする。ロックされていたら、解除を待った上で処理Bをする」
にはどうしたらよいでしょうか?
0582nobodyさん
2011/02/06(日) 15:43:43ID:RrdA9rdH質問に答えていただいた方々ありがとうございます。
また質問させてもらうかと思いますがよろしくお願いします。
0584nobodyさん
2011/02/06(日) 16:53:00ID:???何がどの様にどれだけ無駄になるのかを知りたい。
100万人が同時にアクセスして、100万−1回の無駄が出てしまうのだろうか?
0585nobodyさん
2011/02/06(日) 17:07:29ID:???0586nobodyさん
2011/02/06(日) 17:26:05ID:???0587581
2011/02/06(日) 17:33:24ID:5gbalayA試してみます。
>>584
おっしゃるとおりです。
処理が終わるのを待てば100万人がアクセスしても処理は1回で済みます。
(最も、PHP初心者が細かいことまで気にする必要があるのかわかりませんが・・・)
>>585
処理する前にhtmlを作成してロックしておくということでしょうか。
>>586
その方法はよく見かけますね。
試してみます。
0588nobodyさん
2011/02/06(日) 17:35:55ID:???0590581
2011/02/06(日) 17:43:45ID:5gbalayA削除に失敗したら解除されなくなってしまうんでしたっけ。
すみません。
ロック(が解除されて、自分が)した後にもう一回.htmlの存在を確認すればできそうですね。
二回確認するのが無駄な気もしますが、やはり初心者が気にするようなことではないですかね。
0591nobodyさん
2011/02/06(日) 17:45:54ID:???0592nobodyさん
2011/02/06(日) 17:53:11ID:???少しくらいこぼれてもいいならtmpファイルとかflock使えばいい
ディレクトリロックは完璧に作れば排他処理ができるが初心者がいきなりできるもんじゃない
0593nobodyさん
2011/02/06(日) 17:57:32ID:zdEuJ7Gl0594nobodyさん
2011/02/06(日) 18:27:52ID:???要は前日分の集計結果が出てない状態を無くしたいということかな?
すぐに反映されるとは限らないと割り切る方が楽だけどね
if(前日分htmlが無ければ){
if(前日分txtへのロックが成功した){
前日分htmlを作る処理
}else{
// 何もしない
echo "前日分は処理中です。もうしばらく待ってから云々";
}
}
(普通はCron使う)
>>593
/docs/all_settings
0595nobodyさん
2011/02/06(日) 22:17:55ID:???0596595
2011/02/06(日) 22:19:03ID:???0597nobodyさん
2011/02/06(日) 22:50:11ID:???0599nobodyさん
2011/02/06(日) 22:54:08ID:???0600nobodyさん
2011/02/06(日) 22:54:54ID:???0601597
2011/02/06(日) 23:02:13ID:VXFQ3KR5【PHPのバージョン】わかりません xamppの一番新しいの
【連携ソフトウェア】
【質問内容】
定義済み変数の一覧(´∀`(⊃*⊂)たいです。
クラスのメソッド内や、関数内だけで結構です。
0602597
2011/02/06(日) 23:03:35ID:VXFQ3KR50603nobodyさん
2011/02/06(日) 23:43:18ID:???0604nobodyさん
2011/02/06(日) 23:59:25ID:???定義済みの手続き型関数とユーザー定義関数はマニュアルの関数処理参照get_defined_functions
クラスのメソッドは別の標準関数で可能だが601の書き方で答える気が失せたのでパス
0605597
2011/02/07(月) 00:00:03ID:iMsNk9RA0607nobodyさん
2011/02/07(月) 00:09:28ID:???■get_defined_vars() - 全ての定義済の変数を配列で返す
■get_defined_constants() - すべての定数の名前とその値を連想配列として返す
■get_declared_classes() - 定義済のクラスの名前を配列として返す
0608nobodyさん
2011/02/07(月) 00:13:58ID:iMsNk9RAありがとうございます。神様。
0609nobodyさん
2011/02/07(月) 01:36:54ID:???0610nobodyさん
2011/02/07(月) 01:48:30ID:???0611nobodyさん
2011/02/07(月) 02:09:58ID:???「アーリー」だっつーの。
0612nobodyさん
2011/02/07(月) 02:17:18ID:???arrayはアーレイでもアーリーでもなく
あれー? が国内では一般的。
0613nobodyさん
2011/02/07(月) 02:18:37ID:???0614nobodyさん
2011/02/07(月) 02:19:59ID:???まだ、先輩とやらの方が近い。
これを聞いて(スピーカーアイコンクリックせれ)先輩に土下座してこいw
ttp://www.excite.co.jp/dictionary/english_japanese/?search=Array&match=beginswith&dictionary=NEW_EJJE&block=34834&offset=728&title=array
0615nobodyさん
2011/02/07(月) 02:32:28ID:???0616nobodyさん
2011/02/07(月) 03:47:22ID:???普通にアレイでいいと思うが
日本人がarrayと発音するとawayに間違われるかもな
0617nobodyさん
2011/02/07(月) 04:05:10ID:???0618nobodyさん
2011/02/07(月) 04:50:37ID:???0619nobodyさん
2011/02/07(月) 05:49:29ID:???0620nobodyさん
2011/02/07(月) 08:57:52ID:???ェアレェェイです
■ このスレッドは過去ログ倉庫に格納されています