【PHP】下らねぇ質問はここに書き込みやがれ 43
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/04/01(日) 04:21:50ID:VGqlLhlDPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 41
http://pc11.2ch.net/test/read.cgi/php/1173163186/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0680nobodyさん
2007/04/09(月) 03:09:37ID:xbEWIqwPO型・・・
0681nobodyさん
2007/04/09(月) 03:11:39ID:Lr1gb1O7◎マル秘!総合サイト! m(__)m《どろろ》m(__)m
超人気!完全決定版です!ホスト掲示板・風俗掲示板お水掲示板・総合掲示板
ブラックOK!必殺金融屋!超激安噂の車屋さん☆
このサイトを知らない者は必ず損します(--;)!!
0682nobodyさん
2007/04/09(月) 03:40:07ID:???0683nobodyさん
2007/04/09(月) 03:47:43ID:???0684nobodyさん
2007/04/09(月) 04:01:04ID:???0685nobodyさん
2007/04/09(月) 04:20:52ID:vh2gxFaj$elemA[0]="りんご";
$elemA[1]=0.23;
$elemB[0]="みかん";
$elemB[1]=0.21;
$elemC[0]="ばなな";
$elemC[1]=0.11;
$array[0]=$elemA;
$array[1]=$elemB;
$array[2]=$elemC;
とされた$arrayを各要素の2つ目の要素の数字でソートしたいのです。
関数sort()はこういう使い方を想定して無いみたいなので困っています。
こういう場合どうすればいいのでしょうか?
0686nobodyさん
2007/04/09(月) 04:26:35ID:???0687nobodyさん
2007/04/09(月) 04:49:00ID:xbEWIqwP0688nobodyさん
2007/04/09(月) 05:24:42ID:kaHzWtZFPHPでSmartyが使いたくてダウンロードして特定のディレクトリにコピーした後、
php.iniのinclude_pathにそのディレクトリへのパスを設定。
んでrequire_once("Smarty.class.php");ってやるとSmarty.class.phpが見つからないって言われる。
見たところパスはちゃんと設定されてて、反映もされてるし、Smarty.class.phpもある。
Apacheはちゃんと再起動したし、なんでエラー?みたいな。
ちなみにSmartyだけじゃなくて他のファイルも同じような状況。
カレントディレクトリとかは普通に読み込めるんだけど、/usr/local/...とかになると無理。
前はApacheもPHPもソースをコンパイルして入れててその時はちゃんと動いてたんだけど、
パッケージに入れ替えてから動かなくなった・・・。
これって何が原因が原因なのかわかる人いる?
0689nobodyさん
2007/04/09(月) 05:30:23ID:kaHzWtZF環境はFedora6、Apache2.2、PHP5
0690nobodyさん
2007/04/09(月) 06:32:22ID:???0691nobodyさん
2007/04/09(月) 07:21:43ID:???0692nobodyさん
2007/04/09(月) 07:55:44ID:???のとき
foreach($array as $key=>$value){
echo $key;
}
で、「ABX」を表示できるけど、
echo $array['ABX']がそのままテストと表示されるように
ABXを表示できないの?
0693nobodyさん
2007/04/09(月) 08:14:03ID:???0694nobodyさん
2007/04/09(月) 08:18:52ID:???「テスト」の部分が空白のとき
array_flipなら []=>ABXになるけど
直接echoにできないね
0695644
2007/04/09(月) 08:34:27ID:WcujzhhQ自己解決しました。
なんとか複数のIPを連続的に国判別する方法が見つかりました。
お騒がせいたしました。
0697nobodyさん
2007/04/09(月) 10:37:50ID:iVxz/LH1最初パーミッションかと思ったんだけど、エラーにはパーミッションのエラーは出ててなくて、
ただファイルが見つからないっていう表示がでるだけ。
>>696
phpinfo()見る限りでは/etc/php.iniを読みにいってるようになってる。
get_include_path()で設定されてるパスを調べてみたら設定が反映されてるみたいだからちゃんと機能はしてると思う。
ただなぜか読み込めない。
なんだこれ。orz
0698nobodyさん
2007/04/09(月) 10:41:36ID:???Smarty って現在バージョンは、インストール直後、スクリプトファイルは、Smarty/libs/*phpにあるので
そこはチェックした?
0699nobodyさん
2007/04/09(月) 11:07:06ID:SC5xLpVK普通に hoge.php?value=+ とやっても取得できません。やはりエンコードすべきなのでしょうか?
0700nobodyさん
2007/04/09(月) 11:15:57ID:???そういう問題ではなくて、そもそも+を値として扱うというのが不正規
RFC2396の2.2.Reserved Charactersを見ましょう。
+は、あなたがやってるuriの?、=と同等の扱いです
0701nobodyさん
2007/04/09(月) 11:18:43ID:SC5xLpVKありがとうございます。
具体的に+を値として認識させてGETで取得するにはどのような方法があるのでしょうか?
0702nobodyさん
2007/04/09(月) 11:20:00ID:SC5xLpVKありがとうございます。
具体的に+を値として認識させてGETで取得するにはどのような方法があるのでしょうか?
0703nobodyさん
2007/04/09(月) 11:22:39ID:???・・・どうしてもしたいなら、encodeすればいい。
0704nobodyさん
2007/04/09(月) 11:27:53ID:SC5xLpVKありがとうございます。
URIから抜く際、たとえばPathが /hoge/appl/itemの場合 スラッシュ(/)の3番目以降の値(item)を取り出すにはどうすればいいのでしょうか?
0705nobodyさん
2007/04/09(月) 11:31:43ID:???0707nobodyさん
2007/04/09(月) 12:11:27ID:???漏れてもいいような情報ならmd5でもいいんじゃないかね。
0708nobodyさん
2007/04/09(月) 12:21:35ID:4ZyIPEhaチェック済みです。
yum install php-smartyでパッケージでいれると
/usr/share/Smatyにインスコされるみたいなんですが、そこにパスを通しても読めないorz
というかSmatyじゃなくてもPEARとかでもなんでもそんなかんじです。
これはもうOSごと最インスコかな、、、
0709nobodyさん
2007/04/09(月) 12:21:42ID:???0710nobodyさん
2007/04/09(月) 12:35:15ID:???×Smaty
○Smarty
のタイポと思うが、それはそれとしてOSごと再インスコっていうのはヤケクソみたいだから
やめようぜw
とりあえず
ini_set ('include_path','パス名:パス名');
で明示的に指定しても駄目なの?
なんかすごくプリミティブなところで確認ミスしてる気がするぞなんか。
0711nobodyさん
2007/04/09(月) 12:41:08ID:???ソースコンパイルする技能があるなら、とりあえずそれでやるべきだよね。
パッケージインストールは、カーネルとか、そういうのに限るべきだと思う。
問題の切り分けが出来なくなるわw
0712nobodyさん
2007/04/09(月) 12:55:42ID:W+dKCXXH<
>
&
"
'
これらの文字以外に正規表現などで使われるメタ文字も無害化するべきでしょうか?
0713nobodyさん
2007/04/09(月) 12:56:11ID:???0715nobodyさん
2007/04/09(月) 13:05:04ID:???投稿→確認画面→投稿完了
をするときにうまいこと分ける方法ないかな・・・
皆どんな感じでやってる?
値無し=投稿
$_POSTのみ=確認画面で$_POSTをセッションに
$_POST+$_SESSION=投稿完了
これがベストかな?
0716nobodyさん
2007/04/09(月) 13:10:28ID:W+dKCXXH作法を学習するために独自で作りたいと思ってます。
他の言語にも作法を適用したいためなんですが無駄にやりすぎですかね?
0718nobodyさん
2007/04/09(月) 13:16:01ID:???だめじゃないかな。
ブラウザで投稿画面に戻ったときに既にセッションに値入ってるもん。
それだと、投稿画面に戻る→修正して投稿したときに確認が画面がスルーされて完了しちゃうよ。
formのhidden値で区分けるべき。あと、上に書かれてる$_FILEの扱いも気をつけてね。
0719nobodyさん
2007/04/09(月) 13:23:34ID:VhSqsDLrIPアドレス:ポート番号で接続を試行して、応答が返ってきたらtrueを返す。
みたいな都合のいい関数ありませんでしょうか?
0720nobodyさん
2007/04/09(月) 13:31:52ID:???PHP5ならstream_socket_clientで一発
4ならphp socket ping あたりでググレ。ping系スクリプトが転がってる。
0721nobodyさん
2007/04/09(月) 13:48:05ID:VhSqsDLrpingが通らなかったので、pingを使わない方法を探していましたが、
これでいけるようです!どうもありがとうございました。
0724nobodyさん
2007/04/09(月) 14:10:56ID:???PHPなんかだと組み込みの高機能な関数が多すぎる。
0725nobodyさん
2007/04/09(月) 14:11:29ID:???0726nobodyさん
2007/04/09(月) 14:24:21ID:kaHzWtZFレスサンクスです。
試してみたけどやっぱりダメだた・・・。
状況としてはこれにかなり近い感じ。
[PHP-users 30825] Pear DBでのエラー
http://ml.php.gr.jp/pipermail/php-users/2006-November/031342.html
0727nobodyさん
2007/04/09(月) 14:33:36ID:W+dKCXXHhtmlに出力するときはhtmlspecialcharsで対象となる文字のみ対策しておけばXXS対策になるんでしょうか?
0729nobodyさん
2007/04/09(月) 14:57:00ID:kaHzWtZFSmarty以外も読めんですorz
ファイルの種類というよりもむしろ、ディレクトリの場所によって読めるか読めないかみたいな感じで、
カレントディレクトリとかドキュメントルート以下(/var/www/html/〜〜)の中にあるファイルなら普通に読めるんですけど、
/usr/〜〜とかそれ以外の場所になるとパスが通ってても読めない状況です。
0731nobodyさん
2007/04/09(月) 15:05:50ID:???クライアントからの入力データだと思うもの全てをhtmlspecialcharsに突っ込んでも安全とは限らない。
本質的にXSSはプログラマがクライアントからの入力全てに気を配らないと起こり得る。
環境変数もどれが任意でどれがそうでないかを全て把握してる人はそういない。
よって、HTML出力を必要としない部分全てをhtmlspecialcharsに突っ込むのが安全。
尤も、タグの属性値なんかに突っ込むならそれでも不十分。そんな設計は見直すべきだが。
0732nobodyさん
2007/04/09(月) 15:09:03ID:kaHzWtZFセーフモードっていうのがよくわかってないんですが、
php.iniを見てみたら
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
みたいになってます。
0734nobodyさん
2007/04/09(月) 15:28:35ID:kaHzWtZFああああああああああああああ!
# getenforce
Permissive
鬱すぎるorz
0736nobodyさん
2007/04/09(月) 15:51:53ID:kaHzWtZFseLinuxは無効になってたっぽいです。
もうほんとなにが悪いんだか・・・。
0737nobodyさん
2007/04/09(月) 16:34:56ID:R/Jf3MPV最近よく私が管理しているWikiにスパムが飛んできて困っているのですが、
$_POST['msg']に入っている本文から英字だけ抜き出す場合どうすればいいのでしょうか。
それを使って英字の文字数によりスパム弾きをしたいと思っているのですが…
0738nobodyさん
2007/04/09(月) 16:37:16ID:???0739nobodyさん
2007/04/09(月) 16:39:28ID:R/Jf3MPVeregを使うという所までは思いついたものの、
ループ処理で文字を次々ヒットさせる際の処理が思い浮かばず…
0740nobodyさん
2007/04/09(月) 16:41:23ID:???ふぬああああああああああああああああああ
[a-z]
}
うんこ。
0741nobodyさん
2007/04/09(月) 16:48:59ID:???答える方も質問してる方も時間の節約になる
エスパーが登場すればこの限りではないが
0742nobodyさん
2007/04/09(月) 16:54:25ID:???0743nobodyさん
2007/04/09(月) 17:03:39ID:???0744nobodyさん
2007/04/09(月) 17:13:48ID:???で、あえて聞くけど
require_once(フルパス);
もエラーになるの?
あるいは
echo file_exsists(フルパス);
はtrue返るの?
0745nobodyさん
2007/04/09(月) 17:15:02ID:???0746nobodyさん
2007/04/09(月) 17:16:23ID:R/Jf3MPV有難う御座います。
参考にしながらこんなのを組んでみました…
$msg = $_POST['msg'];
$eng_num = 0;
$i = 0;
//コメントスパム対策
while($i<=strlen($msg)) {
$i++;
$num = substr($msg,$i,1);
if (ereg('[a-zA-Z0-9]',$num)) { $eng_num++; }
}
if (strlen($eng_num)>50) { die; }
…が正しく実行されないのは置いといて、
大体こんな感じでいいのでしょうか。
0747nobodyさん
2007/04/09(月) 17:26:22ID:???$msg = $_POST['msg'];
$eng_num = 0;
$i = 0;
while( $char = ord($msg[$i++])) !=0) {
if (ereg('[a-zA-Z0-9]',$char)) { $eng_num++;}
if($eng_num > 50 ) {die('invalid post');}
}
0749nobodyさん
2007/04/09(月) 17:33:38ID:R/Jf3MPV有り難う御座います!
バイト後にやってみます。
0750nobodyさん
2007/04/09(月) 17:34:07ID:???0751nobodyさん
2007/04/09(月) 17:54:18ID:???無駄なものってなんですか?
preg_match_all('/\w/',$_POST,$c);
if (count($c[0]) > 50) die();
で問題が出る?
0752nobodyさん
2007/04/09(月) 20:35:33ID:???0753nobodyさん
2007/04/09(月) 20:43:57ID:???spycに添付されていたspyc.ymlで比較してみたんだけど、違うようです。
あと、syckは解析できなかった時に、"unknown type"を返しますよね?
なんじゃこりゃ?
0754nobodyさん
2007/04/09(月) 20:50:38ID:W+dKCXXH$sqlのなかにフィールド名とテーブル名が入った変数を入れると動きません。
$sqlの中に変数ではなくて、フィールド名とテーブル名を直接書けば正常に動きました。
フィールド名とテーブル名を変数に格納して、$sqlにまぜたいのですが
うまくいきません。
以下、問題となるコードを抜粋しました。
$field_name = "id, name";
$table = "table1";
$sql = "SELECT $field_name FROM $table_name ORDER BY id";
$res = mysql_query($sql,$con) or die("データを抽出できません");
PHP4.4.6とMySQL4.1を使用してます。
どなたかご教授お願いいたします。
0756nobodyさん
2007/04/09(月) 20:59:38ID:???$table = "table1";
$sql = "SELECT $field_name FROM $table_name ORDER BY id";
$table_nameなのか$tableなのか
0757nobodyさん
2007/04/09(月) 21:16:25ID:???タイム計測したらechoの方が二倍近く速かったんだが
0758nobodyさん
2007/04/09(月) 21:26:31ID:???変数を"でくくるのはこれで合ってますか?
$sql = "SELECT \"$field_name\" FROM \"$table_name\" ORDER BY id"
試してみましたが動きませんでした。
>>755
すいません、$tableは$table_nameの打ち間違えです。
echo で$sqlを出力したらでてきた内容です。
SELECT id,name, FROM table1 ORDER BY id
変数の中身を直接書くと動くので、SQL文自体には間違いはないと思ってますが
何か勘違いしている部分等ございましたらご指摘ください。
0759nobodyさん
2007/04/09(月) 21:29:13ID:Hw87SVIBphp -f test.php
とコマンドラインから呼び出したのですが何も表示されません。
何故でしょうか?
test.php
<?
print "aaaaaaaaa";
?>
0760nobodyさん
2007/04/09(月) 21:30:30ID:???SELECT id,name, FROM
の抽出するフィールドリストの最後にカンマついてちゃだめ
てかmysql_error使え
0762nobodyさん
2007/04/09(月) 21:54:49ID:LuOmRtTQ------------------------------------------------------
$_POST['name1'] = htmlspecialchars($_POST['name1']); //1回目だけ特殊記号変換
echo $_POST['name1'];
echo $_POST['name2'];
$form = "<form action=\"${_SERVER['PHP_SELF']}\" method=\"POST\">
<input type=text name=name1>
<input type=hidden name=name2 value=\"${_POST['name1']}\">
<input type=submit value=\"go\">
</form>
";
echo $form;
------------------------------------------------------
一度受け取った$_POST の中身をhtmlspecialchars で&gt; に変換して
もう一度送っているだけなんだが。
(俺の頭の中では)$_POST['name2']の中身は&gt; 変換済みになっているわけだが、
二回目を受け取ったら(もう一度送ったら)、自動的に元に戻っちゃうわけ?
助言をお願いします。
0763nobodyさん
2007/04/09(月) 22:03:07ID:???意味不明
>$_POST['name2']の中身は&gt; 変換済みになっているわけだが、
意味不明
>二回目を受け取ったら(もう一度送ったら)、自動的に元に戻っちゃうわけ?
意味不明
返れ
0764nobodyさん
2007/04/09(月) 22:03:45ID:???$fromとかわけわかんないんだけどさ
0765nobodyさん
2007/04/09(月) 22:03:49ID:???Cookieに値は入れないが概念的にそうとも言える。
>>759
エラーも表示されないってことなら、同じファイル名の別のtest.phpだったとか。
>>762
変換というよりエスケープ。
$form = "<form action=\"${_SERVER
ここで「"」を「\"」にエスケープしてるけど、HTMLでは元に戻ってるでしょ?
0766nobodyさん
2007/04/09(月) 22:06:48ID:???まあ誰もがハマる道かもしれんな
元に戻るんじゃなく、送信されるhiddenの値が
HTMLエスケープされていない文字列ってだけだ
0769762
2007/04/09(月) 22:17:16ID:LuOmRtTQごめん、あれだ、マジでこんがらがっている
かりに<img>を入れると<img>に変換されて
<input type=hidden name=name2 value="<img>">
上のソースになるわけだけど、
これをそのまま送るとなんで<img>になっちゃんだ?
0770nobodyさん
2007/04/09(月) 22:22:09ID:6Xdj6yAC普通に考えて<一回目>は
&lt;img&gt;
になってるだろ
0772499
2007/04/09(月) 22:24:02ID:???なんか検索して一見目にここから最新のfixもってってちょって書いてあったんで落としてビルドしたけどやっぱいり同じエラーで止まったっす
英語読めてないだけかもしれませんが
0773762
2007/04/09(月) 22:24:26ID:LuOmRtTQ<input type=hidden name=name2 value="&lt;img&gt;">
0775nobodyさん
2007/04/09(月) 22:27:20ID:AitdzCc4質問の内容がまじで意味不明だが
ページを開くと一度だけプログラムが実行され
実行終了後には変数が全て空っぽになる(一部例外は除く
0777nobodyさん
2007/04/09(月) 22:33:49ID:AitdzCc4$post = $_POST;
"SELECT * FROM test WHERE id='$post'"
より
"SELECT * FROM test WHERE id='"+$post+"'"
のほうがいいんですかね?
$postの値が「' 適当なSQL文'」だったらまずいですよね
もしその場合は下記の方も同じ動作なのでしょうか?
0778nobodyさん
2007/04/09(月) 22:38:10ID:???0779nobodyさん
2007/04/09(月) 22:41:03ID:???そんなこと気にするくらいなら
適当なDBインターフェースを利用して
プレースフォルダを使えばいい
pear::DB の場合
$params = array($post);
$sql = "SELECT * FROM test WHEAR id=?";
$ret = $conn->query($sql, $params);
0780nobodyさん
2007/04/09(月) 22:44:42ID:???+演算子じゃインジェクションの前にとんでもないことになるけど。
クォートするかPDOStatement->bindValue()でも使おうぜ…。
■ このスレッドは過去ログ倉庫に格納されています