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

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

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

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

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0641nobodyさん2012/07/11(水) 22:39:01.90ID:1l0z+RDi
>>640
そうなんですね。
ありがとうございました!
0642nobodyさん2012/07/11(水) 22:41:30.81ID:???
>>639
IDごとにテーブルを作ってたら大変なことになっちゃうよー
0643nobodyさん2012/07/12(木) 00:53:09.84ID:???
IN句は遅い
0644nobodyさん2012/07/12(木) 01:04:12.51ID:???
PHP自体が遅いから無問題
0645nobodyさん2012/07/12(木) 10:41:09.50ID:???
テーブルをカード型DBのカードに見立てる初心者は多いな
0646nobodyさん2012/07/12(木) 12:01:24.77ID:txUpsx2K
配列の存在判定について質問させてください。
$hoge = array();
で配列を初期化し、いくつか処理を挟んだのちに配列に値が格納されたかを確認したい場合はどのようにしたらよいでしょうか。
is_arryaだと配列であることは判定してくれますが、実際に$hogeの中に値が格納されたかがわからず
やりたいこととしては、implodeで処理した配列をわけたいのですが、値が入らず初期化されたときの
状態だとエラーがでてしまうため、それを避ける判定をしたいのです
0647nobodyさん2012/07/12(木) 12:43:10.44ID:???
>>646
よくわからんけど
var_dump($hoge);
で中身は見れる

値が入ってないのは
if(isset($hoge)){
とか
if($hoge = ""){
とかで判定できる
0648nobodyさん2012/07/12(木) 12:48:45.29ID:???
$arr = array(0);
if (!$arr) {
echo '空';
} else {
echo '空じゃないよ';
}
0649nobodyさん2012/07/12(木) 17:48:40.12ID:???
if(count($hoge) !== 0)
0650nobodyさん2012/07/12(木) 22:26:09.10ID:???
>>646
>implodeで処理した配列をわけたいのですが、値が入らず初期化されたときの
>状態だとエラーがでてしまう

エラー出るか?
0651nobodyさん2012/07/12(木) 22:29:14.95ID:mtMn8fbF
null、trueなどは小文字で書くのと大文字で書くのでは
どっちが正しいのですか?好みですか?
0652nobodyさん2012/07/12(木) 22:34:30.48ID:???

http://www.php.net/manual/ja/language.types.boolean.php

http://www.php.net/manual/ja/language.types.null.php
0653nobodyさん2012/07/12(木) 23:09:25.46ID:???
>>651
好みだけどコーディング規約とかに書いてるから
従いたいコーディング規約に従って下さい
特にないなら好きにすればええ
0654nobodyさん2012/07/12(木) 23:10:03.67ID:fExz0nN3
配列や文字列の空判定によくempty($var)ってやってるんだけど、他にempty使うひとあまり見ない
empty使った空判定になにか穴とかある?
0655nobodyさん2012/07/12(木) 23:26:41.82ID:???
数値の0がtrueになる
0656nobodyさん2012/07/12(木) 23:27:30.87ID:???
そういう使い方なら、否定演算子の方が短いからじゃね
0657nobodyさん2012/07/12(木) 23:31:39.43ID:fExz0nN3
否定演算子でも同じ結果になるんだっけ
否定演算子でfalseになる場合とか覚えるのめんどいし紛らわしいからemptyのほうが字面的にどういうときにtrueになるのか一発で分かっていいと思ったんだけど
まあありがとう
0658nobodyさん2012/07/12(木) 23:31:40.23ID:???
emptyよく使ってたけど
今はcountするか演算子使っちゃうわ
0659nobodyさん2012/07/12(木) 23:36:39.55ID:fExz0nN3
> empty()は、変数が設定されていないときに警告が生成 されないことを除けば、(boolean) var の逆です。
って書いてあったわ
そして確かに"0"がtrueになるのは忘れてた
これから気をつける
ありがとう
0660nobodyさん2012/07/12(木) 23:38:49.20ID:???
型の比較表見れの一言で終わる話
0661nobodyさん2012/07/12(木) 23:42:20.41ID:???
issetとかemptyとかis_nullとか一見すると違いがわかりにくいのがPHPだ。
0662nobodyさん2012/07/12(木) 23:44:24.37ID:???
それはお前の能力が低いだけだ
0663nobodyさん2012/07/12(木) 23:49:23.37ID:???
0=="php"
0664nobodyさん2012/07/12(木) 23:49:42.60ID:???
>>661
それはPHPの適当設計に由来する
0665nobodyさん2012/07/12(木) 23:51:10.92ID:???
関係ねえよ
それぞれちゃんと意味はある
0666nobodyさん2012/07/12(木) 23:52:01.01ID:???
>>665
Javaではどのようになりますか?
0667nobodyさん2012/07/13(金) 00:35:18.02ID:???
>>666
>>1
0668nobodyさん2012/07/13(金) 00:42:26.73ID:???
スルーして下さい
0669nobodyさん2012/07/13(金) 00:43:50.73ID:???
23. Javaの話をすると回答者が不機嫌になるんだけど・・・
 → 他言語について言及しないこと。ここの回答者はPHPしかわかりません。
0670nobodyさん2012/07/13(金) 00:48:50.34ID:???
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
0671nobodyさん2012/07/13(金) 00:49:34.88ID:???
そいつにかまったらあかん
0672nobodyさん2012/07/13(金) 00:57:22.46ID:OKb5KGY4
バイナリ文字列へのキャストって何の意味があんの?

http://www.php.net/manual/ja/language.types.type-juggling.php
$binary = (binary) $string;
$binary = b"binary string";
0673nobodyさん2012/07/13(金) 01:51:01.22ID:OKb5KGY4
自己解決しました
0674nobodyさん2012/07/13(金) 04:21:23.08ID:???
PHPの資格はとった方がいいですか?
0675nobodyさん2012/07/13(金) 05:16:26.73ID:???
>>674
こんなところで聞いてもほぼ全員取るなっていうのはお前も分かってるだろw

俺としては就職には使えないけど勉強にはなると思う。

俺はJavaの資格を仕事で不要と知りつつとったおかげで
ある程度の基礎体力がついたという自信が持てた。
まぁ、一度取っただけで更新してないけどね。高いしw

ただ、学校で専門的な勉強積んできた自信があるんだったら軽々しくは勧めない。
0676nobodyさん2012/07/13(金) 05:18:33.68ID:???
あれってマイナーな関数とかも網羅的に知ってないといけないの?
0677nobodyさん2012/07/13(金) 07:28:44.12ID:???
くそPHPの変態的な関数名や引数の並びを覚えるなど無意味
06786462012/07/13(金) 08:01:15.46ID:QXmL2Tvf
>>648
ありがとうございます
所望した通りの動作になりました

>>650
error_repotingで警告類を一切出さないようにしたいもので
0679nobodyさん2012/07/13(金) 08:53:20.08ID:???
PHPの資格はかっこ悪い。素人自慢みたい。
0680nobodyさん2012/07/13(金) 10:15:27.87ID:???
もしもPHPの資格を持ってたとしても
そのことが恥ずかしくて隠す
0681nobodyさん2012/07/13(金) 10:20:00.06ID:???
LLなんて皆オモチャだからね
0682nobodyさん2012/07/13(金) 11:37:00.81ID:???
コンピュータがそもそもオモチャだろ
0683nobodyさん2012/07/13(金) 14:25:39.75ID:???
大人のオモチャ
0684nobodyさん2012/07/13(金) 14:52:14.37ID:???
餅はオモチャ
06856342012/07/13(金) 20:13:58.21ID:???
>>636
>>637
ありがとう!
0686nobodyさん2012/07/14(土) 00:23:48.68ID:???
>>683
>>684
ありがとう!
0687nobodyさん2012/07/14(土) 01:34:58.52ID:???
>>685
>>686
ありがとう!
0688nobodyさん2012/07/14(土) 02:47:01.60ID:???
いいってことよ
0689nobodyさん2012/07/14(土) 15:20:20.31ID:tpNzSTZt
FFでセッション変数に書き込んだ値がFFでしか使えず、
IEではセッション変数が空になるのは何故ですか?
セッション変数ってサーバー側で保持されるから、
こんな事態にならないのではないですか?
0690nobodyさん2012/07/14(土) 15:26:34.25ID:???
cookieが使用されてるから
サーバーに保存したデータがどのクライアントのものか識別する必要があるでしょ
0691nobodyさん2012/07/14(土) 17:01:22.93ID:???
>>674
とっても良いが、履歴書には書きづらい。
英検4級のイメージだな。
0692nobodyさん2012/07/14(土) 17:35:55.03ID:???
英検3級も書きづらいだろ
せめて準2級からじゃないと恥ずかしい
0693nobodyさん2012/07/14(土) 18:15:23.92ID:???
>>440
具体的にどのように設定すればよろしいでしょうか?
0694nobodyさん2012/07/14(土) 18:18:05.13ID:???
またお前か
0695nobodyさん2012/07/14(土) 18:21:02.42ID:???
コネクションプーリングw
0696nobodyさん2012/07/14(土) 18:28:39.21ID:???
phpにできないことはない
0697nobodyさん2012/07/14(土) 18:34:13.49ID:???
テンプレに追加するか・・・
0698nobodyさん2012/07/14(土) 18:54:49.02ID:???
>>693
あんた1週間もの間、何してたんだ?
0699nobodyさん2012/07/14(土) 18:57:14.17ID:???
かまったらだめ
0700nobodyさん2012/07/14(土) 21:53:37.46ID:???
コネクションプーリングはPHPではむりぽ
0701nobodyさん2012/07/14(土) 21:55:03.23ID:???
PHPは欠陥言語だからな
致命的な不具合の寄せ集め
0702nobodyさん2012/07/14(土) 22:09:33.37ID:???
するーするー
0703nobodyさん2012/07/14(土) 23:40:38.99ID:63YLPZRT
配列に入った値をサニタイズする関数をつくったのですが、

function check($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$d = htmlspecialchars($data, ENT_QUOTES);
}
}

シェル上では、問題なく動作しているのに、
ブラウザでPOSTされた値を上記関数に入れ込むとなぜかサニタイズされません
しかし、check(check($data))のように2回上記関数に入れ込んでやるとしっかりサニタイズされます
POSTされた値だけ1回でうまくサニタイズされないのはどうしてでしょうか
0704nobodyさん2012/07/14(土) 23:42:02.84ID:63YLPZRT
array_mapの後、転記ミスです
以下コードです

function check($data) {
if (is_array($data)) {
return array_map('check', $data);
}
else {
$d = htmlspecialchars($data, ENT_QUOTES);
}
}
0705nobodyさん2012/07/14(土) 23:51:27.26ID:???
サニタイズって何だよ
セキュリティの専門家に怒られるぞ
何が毒かなんて使う場所によって違う
0706nobodyさん2012/07/14(土) 23:53:36.17ID:???
サニタイズ言うな!
0707nobodyさん2012/07/14(土) 23:59:25.51ID:???
>>703なんか色々おかしい
なんで再帰みたいなことしてるのか
elseでreturnはしないのかとか色々疑問はあるけど

function h($data) {
return htmlspecialchars($data, ENT_QUOTES);
}

$post = array_map('h', $_POST);
でいいのでは
0708nobodyさん2012/07/15(日) 00:15:56.17ID:???
こうやって脆弱性が作られていくんだな
0709nobodyさん2012/07/15(日) 00:21:30.97ID:???
charsetがーとか言っちゃう人ですか
この段階でこんなことするのがそもそもおかしいけどね
0710nobodyさん2012/07/15(日) 01:01:39.01ID:???
charsetまでいくといちいち突っ込まないけど
これはだめでしょ

半角英数字以外をすべて削除するなら
個人的にサニタイズって呼んであげてもいいよ
でも文字列長はチェックしてね
0711nobodyさん2012/07/15(日) 01:10:06.12ID:???
これでいけるはず。

function sanitize($data)
{
if (is_array($data)) {
return array_map('sanitize', $data);
} else {
return 'Don\'t say SANITIZE!';
}
}
07127032012/07/15(日) 05:19:47.39ID:RWRXX5R0
いろいろつっこみどころがありすみません・・・
サニタイズする関数をいくつかつくっていて、特殊文字の変換の関数が上手く動作しなかったので
誤った言い方をしてました
>>707
returnは転記するのにぬけてました・・・ 再帰処理は配列であるなしにかかわらず下の関数でよしとしたかったので
function datacheck($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$data = htmlspecialchars($data, ENT_QUOTES);
}
return $data;
}
問題は、変数に配列を入れて上記関数を通した時には問題ないのに
配列で送られてきたPOSTを通すと特殊文字が変換されない、2回通してやると変換できる
原因が知りたいのです  変数に配列を自分でセットするのとPOSTされてくるので何か違いがあるのでしょうか
07137032012/07/15(日) 05:37:24.30ID:???
補足です
どうもPOSTから受けた配列を変換用関数に入れると、配列の判定をしてはいるものの
再帰処理せず、1回目の配列判定をしたところで処理が終わってるようです
自分で変数に配列をセットした場合は、再帰処理されるのに
POSTの値が再帰処理されないのはなぜでしょう・・・
07147032012/07/15(日) 06:00:50.97ID:???
$d = $_POST['data'];
var_dump($d);

$d2 = datacheck2($d);
var_dump($d2);

$d3 = datacheck2($d2);
var_dump($d3);

上記処理をかますと、
array(2) { [0]=> string(3) "<<<" [4]=> string(2) "<<" }

array(2) { [0]=> string(12) "<<<" [4]=> string(8) "<<" }

array(2) { [0]=> string(24) "<<<" [4]=> string(16) "<<" }

となります  なぜこうなるのでしょうか・・・
string(3) string(12) と長さは変わってるようですが
0715nobodyさん2012/07/15(日) 10:50:26.28ID:???
>>714
>>1
0716nobodyさん2012/07/15(日) 11:17:01.94ID:???
>>714
$youAreUnko = $_POST['mail'] === 'sage';
0717nobodyさん2012/07/15(日) 12:44:31.04ID:???
PHPでできますか?
07187032012/07/15(日) 14:44:00.05ID:???
サニタイズと言って入力値をエスケープするという考え自体が、
脆弱性を作りやすい間違った考えということが分かりました
ありがとうございました
0719nobodyさん2012/07/15(日) 15:23:31.96ID:37AkCOjK
PHPでOAuth認証でtwitterにつぶやきを投稿するプログラムを作ってます。

twitterの画面までは飛ぶのですが。

こちらです。
このページに対するリクエスト・トークンがありません。アプリケーションが〜

みたいな文が出てきて、アプリ認証画面に飛びません。
developerのページにちゃんと登録して、キーなどはちゃんと入力しました。
今はローカルで試しています。
0720nobodyさん2012/07/15(日) 15:25:40.30ID:???
リクエストトークンがないから
0721nobodyさん2012/07/15(日) 15:38:16.39ID:???
>>720
リクエストトークンがないとはどういう意味なんでしょう?
サンプルプログラムを丸写ししてキーを入力しパスなどを変えただけなんです。
0722nobodyさん2012/07/15(日) 15:59:21.04ID:???
マルチ?
0723nobodyさん2012/07/15(日) 21:13:23.03ID:???
twitterやってないからしらんけど

・投稿するAPIがあるならその仕様をちゃんと読む
・APIがないなら通信をトレースして何をしたらどうなるかを把握して専用のクライアントを作成する

結局この2つになるんじゃないの
0724nobodyさん2012/07/15(日) 21:16:49.41ID:???
スレチ
0725nobodyさん2012/07/15(日) 21:43:34.81ID:???
>>719
アクセストークンがない。

read and wrightにしてない

おなじ内容の投稿を繰り返してる。



たぶんどれか
0726nobodyさん2012/07/15(日) 21:47:32.56ID:???
スレチ
0727nobodyさん2012/07/15(日) 22:16:56.04ID:???
そういえばピンク色のイノキとかいうのどうしてんだろうな。
0728nobodyさん2012/07/15(日) 22:30:26.21ID:???
wright
wright
wright
0729nobodyさん2012/07/16(月) 03:34:05.92ID:xItWI94M
>>715
すみません、連投だからとsageてしまいました・・・
改めてお願いします
function datacheck($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$data = htmlspecialchars($data, ENT_QUOTES);
}
return $data;
}
-----------------------------------
$d = $_POST['data'];
var_dump($d);
$d2 = datacheck2($d);
var_dump($d2);
$d3 = datacheck2($d2);
var_dump($d3);
上記処理をかますと、
array(2) { [0]=> string(3) "<<<" [4]=> string(2) "<<" }
array(2) { [0]=> string(12) "<<<" [4]=> string(8) "<<" }
array(2) { [0]=> string(24) "<<<" [4]=> string(16) "<<" }
となり、1回でエンティティ変換できないのはなぜでしょうか
0730nobodyさん2012/07/16(月) 05:18:47.19ID:???
>>729
datacheck2の処理が分からんから何とも言えん
0731nobodyさん2012/07/16(月) 09:11:06.54ID:???
学ぶ力には三つの条件があります。

第一は自分自身に対する不全感。
自分は非力で、無知で、まだまだ多くのものが欠けている。
だからこの欠如を埋めなくてはならない、という飢餓感を持つこと。

第二は、その欠如を埋めてくれる「メンター(先達)」を探し当てられる能力です。
メンターは先生でもお母さんでも、ネットの中の無名の人でもいい。
生涯にわたる師ではなく、ただある場所から別の場所に案内してくれるだけの
「渡し守」のような人でもいいのです。
自分を一歩先に連れて行ってくれる人は全て大切なメンターです。

第三が、素直な気持ち。
メンターを「教える気にさせる」力です。オープンマインドと言ってもいいし、
もっと平たく「愛嬌(あいきょう)」と言ってもいい。

「学ぶ姿勢」のある人は、何よりも素直です。
つまらない先入観を持たないから、生半可なリアリズムで好奇心を閉ざさない。
素直な人に聞かれると、こちらもつい真剣になる。知っている限りのことを、
知らないことまでも、教えてあげたいという気分になる。そういうものです。

以上、この三つの条件をまとめると、

「学びたいことがあります。教えてください。お願いします」

という文になります。これが「マジックワード」です。
これをさらっと口に出せる人はどこまでも成長することができる。
この言葉を惜しむ人は学ぶことができないのです。
学ぶ力には年齢も社会的地位も関係がありません。
>>727さんも、早く学ぶ力を身に付けてください。
0732nobodyさん2012/07/16(月) 11:12:31.31ID:???
phpには問題がない。悪いのは工夫しないこと。
0733nobodyさん2012/07/16(月) 11:36:56.93ID:???
今日も回答者のみなさま、よろしくご指導くださいませ。
07347292012/07/16(月) 11:53:07.77ID:xItWI94M
>>730
チェック用につくったものでした・・・ 注意不足で申し訳ありません
以下、最後にします・・・よろしくお願いします

function datacheck($data) {
if (is_array($data)) {
return array_map('datacheck', $data);
}
else {
$data = htmlspecialchars($data, ENT_QUOTES);
}
return $data;
}
-----------------------------------
$d = $_POST['data'];
var_dump($d);
$d2 = datacheck($d);
var_dump($d2);
$d3 = datacheck($d2);
var_dump($d3);
上記処理をかますと、
array(2) { [0]=> string(3) "<<<" [4]=> string(2) "<<" }
array(2) { [0]=> string(12) "<<<" [4]=> string(8) "<<" }
array(2) { [0]=> string(24) "<<<" [4]=> string(16) "<<" }
となり、1回でエンティティ変換できないのはなぜでしょうか
0735nobodyさん2012/07/16(月) 11:56:18.41ID:???
>>734
HTMLソースを見てみることをお勧めする
0736nobodyさん2012/07/16(月) 12:24:47.48ID:???
>>735
お忙しい中、ご助言ありがとうございます!
0737nobodyさん2012/07/16(月) 12:32:52.88ID:???
>>736
ID
0738nobodyさん2012/07/16(月) 13:28:06.98ID:???
>>737
いつもご案内ありがとうございます。
0739nobodyさん2012/07/16(月) 13:31:55.86ID:xItWI94M
>>735
たしかにHTMLソースを見るとしっかりエンティティ変換できてますね
ブラウザが変換されたものを認識して表示
2回目を通ると、2回変換されたものを1回分戻して表示しているから1回目が変換されたように
錯覚していたのですね
理解致しました、教えて頂きありがとうございました

ちなみに>>736は私じゃないです・・・
0740nobodyさん2012/07/16(月) 13:57:52.34ID:QG6eRF1A
一つ確認なんですが、$_POSTに入ってる値って既にurldecode済みのものですよね?
出力する限りではデコード済みのようでした。
確認だけです
お願いします。
■ このスレッドは過去ログ倉庫に格納されています