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

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

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

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

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0015nobodyさん2009/04/28(火) 14:28:24ID:PkQXIDSH
【PHPのバージョン】php5.26  【連携ソフトウェア】Apache
入力されたマルチバイト文字列(SJIS)を、配列ではなく、予め用意した変数に、
一文字ずつ分割して格納したく思っています。例えば、
$koe = "ありがとう";
なら、
$ichi ="あ";  $ni ="り";  $san ="が";
$yon ="と";  $go ="う";  $roku ="";  $nana ="";
という風に変換する関数を設定したいのです。 具体的に、どういう処理をすればよいのでしょうか?
どうかご助力、お願いいたします。
0016nobodyさん2009/04/28(火) 14:33:27ID:???
foreachかforでまわしながら連想配列で代入してからextract($array)
SJISはちょっとイヤンな感じだからUTFにしたら?
0017nobodyさん2009/04/28(火) 15:22:47ID:???
utf8ならlist($ichi, ...) = preg_split("//u", ..)みたいな感じでおkと思われる
0018nobodyさん2009/04/28(火) 15:25:45ID:???
つmb_split
0019nobodyさん2009/04/28(火) 15:28:01ID:???
// mb_substrとか使えなかったっけ?

$array = array("ichi", "ni", "san", "shi", "go");
$string = "ありがとう";

$count = 0;
foreach ($array as $key => $value) {
$array[$key] = mb_substr($string, $i, 1, "Shift_JIS");
++$count;
}
0020192009/04/28(火) 15:31:09ID:???
ごめん間違えた
$array[$key] = mb_substr($string, $i, 1, "Shift_JIS");
これは
${$key} = mb_substr($string, $i, 1, "Shift_JIS");
にしてくれ
0021nobodyさん2009/04/28(火) 15:39:37ID:???
まだ訂正すべき点があるようだが
0022192009/04/28(火) 15:40:57ID:???
うん、もう気づいたけどめんどくさいからいいや
0023nobodyさん2009/04/28(火) 16:53:54ID:7p1vmHWL
昨日質問したのですが、最後の方で流されたので、
再度質問させていただきます。

CSSファイルの特定のスタイルを取得したいと思います。

$css = 'a:link{background-color:#ffffff;color:#003399;}';
preg_match('/a:link{.*?color:#(.*?);/is',$css,$style);

とし、「color:#003399」の「003399」だけ取得したいのですが、
background-colorの方を取得してしまいます。
どういう正規表現を書けばいいのでしょうか?コードの指摘をお願いします。
0024122009/04/28(火) 20:19:52ID:hPvdrkqO
>>13-14
2回目以降のsession_start()はセッション変数の取り込みに奔走するんですね。
それでしたらわざわざ最後にunsetでセッション変数を破棄しなくても、
再度session_start()が実行されれば最新の$_SESSION['captcha_keystring']が
読み込まれて特に問題なく動作するような気がするんですが・・・
0025nobodyさん2009/04/28(火) 20:38:49ID:???
>>23
条件がよくわからんがa:linkに指定されたcolor値で#000000の形式のみを取得ってこと?

/a:link[^\}]*[^\-]color\s*:\s*#(\w{6})/is
0026nobodyさん2009/04/28(火) 20:50:55ID:???
>>24
お前は何を言ってるんだ
0027232009/04/28(火) 22:10:29ID:7p1vmHWL
>>25
こういう書き方するんですね。勉強になりました。ありがとうございました。
0028nobodyさん2009/04/28(火) 22:20:22ID:???
>>24
とりあえず例題で動かしてから、自分でunset外して動作を見てごらん。
ソース眺めて悩むよりそっちの方が早いよ。
0029122009/04/28(火) 23:31:23ID:hPvdrkqO
>>28
↓のようにコメントアウトして実行してみました
//unset($_SESSION['captcha_keystring']);

結果は・・・、なぜか、というか予想通り何の問題もなく正常に動作しました。

やはり最後のセッション変数のunsetは不要だったんでしょうか。
あるいは古いブラウザでの互換性を重視しておまじない的に書いたんでしょうか。
0030nobodyさん2009/04/28(火) 23:51:01ID:???
>>29
そこで「なぜか」で止まっちゃダメだ。
$_SESSION['captcha_keystring']には、どの時点でどんな値が入っていたのか追ってみよう。
0031122009/04/29(水) 03:02:23ID:I34g5E5l
>>30
$_SESSION['captcha_keystring']にはアンセットされる直前までは
現在表示されてるものよりひとつ前のCaptchaの数字が格納されていました。

ただアンセットしてもしなくても次にsession_start()されるときに次のCaptchaの数字が
上書きされるようです。

う〜む・・・、なぜわざわざアンセットしているんでしょう( ´・ω・)・・・
0032nobodyさん2009/04/29(水) 03:41:14ID:???
複数回実行するときのためにアンセットしてんじゃないの?
0033nobodyさん2009/04/29(水) 05:05:58ID:???
顔文字とか真面目に質問する気あんの?
0034nobodyさん2009/04/29(水) 05:39:51ID:???
認証に使うライブラリなら、一度認証に使用したらさっさと廃棄しないと危険だからじゃないの。
0035nobodyさん2009/04/29(水) 05:46:01ID:???
つーかそもそもCaptchaって何かわかってんだろうか
0036nobodyさん2009/04/29(水) 06:00:07ID:???
>>31
>次にsession_start()されるときに次のCaptchaの数字が上書きされるようです。

違う。$_SESSION['captcha_keystring']をセットしてるのは誰かよーく調べてみなさい。
0037nobodyさん2009/04/29(水) 06:20:53ID:???
提示されたコードばかり見てて全体のフロー、つまり裏でKeystringが発行されてるとこが見えてないんじゃないかな
unset() はキーを発行する処理に対応してるから、そっちの実装を見ないと処理の流れは分からない

新規/リロードなら再発行、ポストなら検証までスルーって実装にすれば unset() いらなくなるかな
0038nobodyさん2009/04/29(水) 06:30:11ID:???
これ、「表示されているアルファベットを入力してください」とか、いうヤツでしょ。たぶん。
unsetしなかったら、同じキーで何度でも使えちゃうじゃん。
アカウント取り放題とか、メール出し放題とか。

キー値はサーバ側に保存しなきゃならんのだし、unsetまたはそれと同等な処理しなくて
良いパターンってないと思うけど。
0039nobodyさん2009/04/29(水) 06:43:06ID:???
バリデーションに成功すればキーは破棄出来るわけだから同じキーが2度以上使われる可能性は排除できるよ

発行と検証の2フェーズあって、検証中でなければ前回の残りがあったとしてもそれを破棄して再発行すればいいわけ
検証中で無いことは empty($_POST["key..]) && !isset($_SESSION['key..]) で判別可能

unset() をクライアントスクリプト側に任せているのは、例えば3回まではトライ可能、といった
キーを無効にするタイミングを選択できるようにしたいとかそういうことじゃないかと予想
0040nobodyさん2009/04/29(水) 06:45:38ID:???
うっぷす!
× empty($_POST["key..]) && !isset($_SESSION['key..])
○ empty($_POST["key..])
再発行条件が empty($_POST["key..]) && isset($_SESSION['key..]) かなw
0041nobodyさん2009/04/29(水) 06:53:22ID:???
シンプルで不足分はユーザが書く小さなライブラリ > 柔軟なAPIがありクライアントのコード量が少なく高機能で汎用性が高く大きなライブラリ
0042nobodyさん2009/04/29(水) 07:00:53ID:???
>>38
いや、機械と人間の識別に使うもの。
これだけだと、人間ならアカウント取り放題、メールし放題、コメントし放題だよ。
後半はその通り。
0043nobodyさん2009/04/29(水) 07:07:51ID:???
>>42
多分、この認証ライブラリの動作を完全に勘違いしてると思う。
自分はもう面倒なんで、これ以上言わんが。
0044nobodyさん2009/04/29(水) 07:37:23ID:sqsMUdXV
Prepared statementって扱うの難しいですね・・・
オブジェクト指向とかさっぱりだし
ぶっちゃけ mysql_real_escape_stringで十分と思ってたら
えらい目に会いますか?
0045nobodyさん2009/04/29(水) 08:09:15ID:???
>>44
趣味のレベルなら全然問題は無い。
お仕事なら規模にも依るが、苦労はすると思う。
0046nobodyさん2009/04/29(水) 12:10:15ID:???
formから入力された文字列をmysqlに保存するサンプルスクリプトを教えてください

DB名:sample_db
テーブル名:sample_tbl
user名:sample
pass:pass
0047462009/04/29(水) 12:10:56ID:5Db2GJA3
ID出し忘れましたすみません。。。
0048nobodyさん2009/04/29(水) 13:18:40ID:???
>>46
マニュアル
0049nobodyさん2009/04/29(水) 13:24:45ID:???
本当にくだらねぇ質問でわろた
0050nobodyさん2009/04/29(水) 13:24:55ID:???
>>46
【PHP】Lvうpしたいので宿題ください
http://pc11.2ch.net/test/read.cgi/php/1147830986/
0051462009/04/29(水) 13:49:34ID:5Db2GJA3
わかりました
移動します
すいませんでした
0052nobodyさん2009/04/29(水) 16:23:34ID:???
誘導先で48が暴れてますよ
0053nobodyさん2009/04/29(水) 16:25:55ID:???
君が論破されてよっぽど悔しかったのね
0054nobodyさん2009/04/29(水) 16:27:51ID:???
>>53
こっちまで荒らしに来ないでおk
向こうのスレで>>46と共食いしてろや
0055nobodyさん2009/04/29(水) 23:16:13ID:bTfRl/qJ
headerで出力した内容を後から削除(上書きでなく)したい場合は
どうしたらいいですか?
たとえば、Content-Script-Type: text/javascriptをheaderで吐いてから、
ケータイなので取り消したい場合などです
0056nobodyさん2009/04/29(水) 23:19:19ID:???
分からないうちから吐かない
0057nobodyさん2009/04/29(水) 23:20:27ID:???
明らかに設計ミス
0058nobodyさん2009/04/29(水) 23:25:22ID:???
>>55
無理
設計からみなおせ
0059nobodyさん2009/04/29(水) 23:26:01ID:???
>>55
取り消しはできんと思うが、 headerを実行するタイミングはずらせたはず。
http://jp.php.net/manual/ja/function.ob-start.php
0060nobodyさん2009/04/29(水) 23:49:25ID:???
できるとすればmod_headersでアンセットくらいかな
0061nobodyさん2009/04/29(水) 23:50:48ID:sqsMUdXV
>>45
なるほど。ありがとうです
0062nobodyさん2009/04/30(木) 09:35:33ID:???
>>55
headerで違うページに飛ばしてやり直し
0063nobodyさん2009/04/30(木) 11:53:33ID:29t/7geC
確率について質問です

$foo=array(
"A" => 60,
"B" => 20,
"C" => 10,
"D" => 7,
"E" => 3,
);
$r = rand(1, 100);
foreach($foo as $k => $v){
if($r<=$v){
$ans=$k;
break;
}
$r-=$v;
}
echo $ans;
0064632009/04/30(木) 11:56:30ID:29t/7geC
$fooに確率を設定します
$rに1〜100まで範囲でランダムで数字を代入します
foreachで$fooのキーと値を回していき、値がランダムの数字$rより低いか同じなら$キーを表示します


>>63のコードは確率のアルゴリズムでありますでしょうか?
0065nobodyさん2009/04/30(木) 12:00:36ID:???
は?
質問の意図がイミフなんだが。
0066nobodyさん2009/04/30(木) 12:09:31ID:???
A〜Eが正しく指定された確率で出力されるかってことじゃないかと予想
0067nobodyさん2009/04/30(木) 12:30:14ID:???
>>65
コードのまんまだと思うけど
0068nobodyさん2009/04/30(木) 12:32:14ID:29t/7geC
>>63は有名な?確率のアルゴリズムらしいんですが
これで確率が出せるのかがわかりません
0069nobodyさん2009/04/30(木) 12:38:19ID:???
出せるんでは?
0070nobodyさん2009/04/30(木) 12:41:55ID:???
このスレには以下の初心者も閲覧しています

65 名前:nobodyさん[sage] 投稿日:2009/04/30(木) 12:00:36 ID:???
は?
質問の意図がイミフなんだが。
0071nobodyさん2009/04/30(木) 12:44:25ID:???
普通に意味不明だろ
0072nobodyさん2009/04/30(木) 12:44:46ID:???
実際にやってみればいい

$foo=array("A" => 60, "B" => 20, "C" => 10, "D" => 7,"E" => 3,);

function castFuckinDice($foo) {
$r = rand(1, 100);
foreach ($foo as $k => $v){
if($r<=$v){
$ans=$k;
break;
}
$r-=$v;
}
return $ans;
}

foreach ($foo as $k => $v) {
$encounter[$k] = 0;
}

$max_trials = pow(2, PHP_INT_SIZE * 8) / 2;

for ($i=0; $i < $max_trials; $i++) {
$spot = castFuckinDice($foo);
$encounter[$spot] ++;

foreach ($foo as $k => $v) {
$ratio = $i ? $encounter[$k] / $i : 0;
printf("[%s]: %02.1f ", $k, $ratio * 100);
}
echo "\r";
}
0073nobodyさん2009/04/30(木) 12:45:25ID:29t/7geC
$vのキーと値がAと60のとき、確率は60%ですが
$rの値が1〜60の場合ですと当たりってことですよね
Bと20のときは1〜20のときが当たりってことですよね

ってことはAの60%から判定されるってことで完全な確率のアルゴリズムではない気がするのです
0074nobodyさん2009/04/30(木) 12:46:41ID:29t/7geC
>>71
すみません、私の説明ではこれ以上無理なのでここ読んできてください
ttp://q.hatena.ne.jp/1170658225
0075nobodyさん2009/04/30(木) 12:49:30ID:???
>>73
Aの60%から判定されるってどういうこと?
曖昧な表現はやめてくれ
0076nobodyさん2009/04/30(木) 12:52:14ID:29t/7geC
>>63のコードより
$fooの配列の戦闘は"A"=>60なのでforeachで回すと"A"=>60のところから回ります
0077nobodyさん2009/04/30(木) 12:52:23ID:???
>>74
有名な確率のアルゴリズムって誰が言ってたの?
0078nobodyさん2009/04/30(木) 12:53:44ID:???
さっきからイミフしか言わない人は出てこなくていいよ^^;
0079nobodyさん2009/04/30(木) 12:54:06ID:???
>>76
"A"=>60のところから回って
1〜100からランダムに得た値と比較して小さかったらそれを答えとするんだから60%じゃん
0080nobodyさん2009/04/30(木) 13:00:48ID:???
なんとなく言いたいことはわかるし、コードも正しい気がするが、>>73は本格的に意味不明。
0081nobodyさん2009/04/30(木) 13:13:35ID:???
PHP言語以前に日本語が解読できん
0082nobodyさん2009/04/30(木) 13:15:48ID:???
質問者は>>73にあるように「60%から検証を始める」と問題がありそうだと考えているようだが
どの目が出るかは rand(1, 100) を実行した時点で決まる
あとは検証してるだけなので、どのアルファベットから始めても確定した過去は変わらない

狐につままれたように思っているのは確率分布の上側を除いていく処理が、なぜ指定された割合と一致するのかということだと予想
これが確率論から導けるのか、それともたまたま計算結果が一致する別のアルゴリズムなのか

それが「この処理は確率のアルゴリズムであるのか?」という表現に至ったのではないかね
0083nobodyさん2009/04/30(木) 13:22:20ID:???
どんな回答が欲しいのか知らんが、とりあえずエスパー能力を発揮して答えるならば

>>68
出せます。安心してお使いください。
0084nobodyさん2009/04/30(木) 13:22:21ID:???
だったら「人に教えてもらったコードなんですがこのアルゴリズムでなぜ確率が計算できるのですか?」とでも聞くべき.
他人に対する配慮が足りない.
0085nobodyさん2009/04/30(木) 13:24:04ID:???
>>84

>>64
0086nobodyさん2009/04/30(木) 13:24:45ID:???
まあこのアルゴリズム体操でも見ておちつくといい
ttp://114.182.140.15/~user/public_html/cgi-bin/bbs18/bbsdata/20.gif
0087nobodyさん2009/04/30(木) 13:25:14ID:2iRqPJM5
>>82
突っかかる部分もありますが、納得できましたので閉めます
0088nobodyさん2009/04/30(木) 13:25:21ID:???
>>85
64のどこに84の内容が抑えられてるんだ?
0089nobodyさん2009/04/30(木) 13:26:16ID:???
>>87
突っかかる部分って?
0090nobodyさん2009/04/30(木) 13:26:41ID:???
>>84
で、そういう風に聞いたら答えられるの?
0091nobodyさん2009/04/30(木) 13:28:58ID:???
横から煽ってるだけの奴は何だ? ヒマなのか?
0092nobodyさん2009/04/30(木) 13:30:05ID:???
>84

人に教えてもらったコードなんですがこのアルゴリズムでなぜ確率が計算できるのですか?
0093nobodyさん2009/04/30(木) 13:30:51ID:???
ググレ
0094nobodyさん2009/04/30(木) 13:38:39ID:???
>>84
まだすか?wwwwwwwwww
0095nobodyさん2009/04/30(木) 13:41:45ID:???
答えは>>82で出てるわけだが
0096nobodyさん2009/04/30(木) 13:48:02ID:???
>>82先生と>>84先生は別人でしょwwwwwwwwwww
84出て来いよwwwwwwwwww
0097nobodyさん2009/04/30(木) 14:24:02ID:???
>>87
1から100までの数からランダムに選択したら、それが60以下である確率は0.6であるというのは明白だろう
この性質を利用して、「60以下である」という条件をAに結びつけ、60以下の数ならAを返すようにする
これはAが60%で出現するということと等価だ

ある数が、60以下ならすぐ終了
60以上ならそこから60を引いて、次にそれが20以下かどうか調べる
Ex. ある数が88なら、60以下か検証、違うから60を引いて28、20以下じゃないので20を引いて8、10以下なのでCを返す

というわけでそのループは、与えられた数が基準より小さいかを効率よく調べるアルゴリズムであって、確率の計算ではない
確率が得られているのは全て rand() に依る
その確率をアルファベットに結び付けているのがこのアルゴリズムというか処理ということになる

と俺なら考えるが、アルゴリズムがなぜ動くかなんて自分の頭で納得するしかないよ
0098nobodyさん2009/05/01(金) 15:12:10ID:???
test
0099nobodyさん2009/05/01(金) 20:43:21ID:???
最近人少ないですね
PHPの時代は終わりでしょうか
0100nobodyさん2009/05/01(金) 20:50:02ID:???
昔からこんなもんだろ
たまにくだらない話題で議論はじまって100スレぐらい一気に伸びるだけ
0101nobodyさん2009/05/01(金) 21:28:59ID:???
100スレ?
0102nobodyさん2009/05/01(金) 21:46:18ID:???
100レスの間違いだろjk
0103nobodyさん2009/05/02(土) 08:08:46ID:???
これからはJavaの時代
0104nobodyさん2009/05/02(土) 08:27:18ID:???
100年に一度の不景気だとなにを根拠にだか言う人が多いから
マインドは冷え込んでるのは間違いないし、金のかかるJavaさんはもう論外になってる
0105nobodyさん2009/05/02(土) 08:29:37ID:???
phpとperlでちまちまとした仕事を数こなしてる俺は勝ち組。

もってあと一ヶ月だな俺。
0106nobodyさん2009/05/02(土) 11:57:49ID:???
ようやく規制解除。

>63
$rを減算する処理が直感的じゃないな。良くないアルゴリズムの部類に入る。
実際>63は意図を読み取れなかったわけだし。
性能上も、$rへの再代入が発生するので最適化がかけづらいはず。

正しく動くプログラムはサルにでも書ける。いいプログラマは人間に理解できるプログラムを書く。
0107nobodyさん2009/05/02(土) 12:07:54ID:???
>>106
多摩動物園のサルにパソコン渡せば書けるんですね
0108nobodyさん2009/05/02(土) 12:46:46ID:???
シェイクスピアだって書けるんだから、10行程度のスクリプトくらい書けるだろ。
0109nobodyさん2009/05/02(土) 13:13:06ID:???
>>104
安かろう悪かろうのPHP使うぐらいならJava採用する企業のほうが多いだろ
バグバグによる経済的損失に比べたらその単価差なんてたいしたことない
0110nobodyさん2009/05/02(土) 13:23:21ID:???
javaってtomcat入れないと使えないジャン
0111nobodyさん2009/05/02(土) 13:32:03ID:???
大規模案件はそれなりにコストのかかる投資。不況ならばそら発注数は減るだろう。
小規模案件はどうだろうな。大規模がスケールダウンして降ってくる数とやめる数とで、あんまり総数は変わらない気がする。

あと、PHPは始まってすらいないが、Javaは終わりつつあると思う。
いや、COBOLだってまだ頑張ってるんだし、俺らの現役期間中に食いっぱぐれる事は無いと思うけどな。
0112nobodyさん2009/05/02(土) 13:53:15ID:???
なんか最近.Netにゴリっと持ってかれることが多い。
そんなに開発しやすいのかねアレ。
0113nobodyさん2009/05/02(土) 17:10:55ID:???
クラサバでWindows+.NETやUnix+Javaならわかるけど
Webで.Netはそんな多くはないぞ?
0114nobodyさん2009/05/02(土) 17:20:42ID:???
俺もそう思ってたんだが、去年くらいから洒落にならんペースで食われてる。
社内システムとWEBシステムが連動し始めたってのもあるかもしれんが。
■ このスレッドは過去ログ倉庫に格納されています