【PHP】下らねぇ質問はここに書き込みやがれpart16
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2006/02/05(日) 22:35:34ID:sf8bx52Dここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/
過去スレは>>2
0951nobodyさん
2006/02/23(木) 23:53:06ID:???0952nobodyさん
2006/02/24(金) 00:42:35ID:???0953nobodyさん
2006/02/24(金) 02:01:19ID:???$hoge = $_POST['hoge'];
をextractを使って表現するとどのように書けばいいのでしょうか?
特に何もしないとXSSの原因になるそうなので、
わからないうちは使うつもりはありませんが、気になるので・・・
0955nobodyさん
2006/02/24(金) 02:30:53ID:???extract($_POST, EXTR_SKIP);
か
extract($_POST, EXTR_PREFIX_ALL, "post");
のどっちかかな。
$hoge = $_POST['hoge'];相当なのは前者。
後者は$post_hoge = $_POST['hoge'];相当。
0956nobodyさん
2006/02/24(金) 02:36:19ID:???どうもありがとうございます。
早速実行してみたところ、
ちゃんと$hoge = $_POST['hoge'];と同じになりますね。
便利ですねえ。
どういう危険性があるか理解できるまで使わないことにします。
ひとつ謎が解けました。ありがとうございました。
0957nobodyさん
2006/02/24(金) 02:38:49ID:???レスしてる間にレスがorz
詳しくありがとうございます。
値もいろいろと指定できるんですねー
早速値に関してどういったものか調べてまいります。
0958nobodyさん
2006/02/24(金) 03:44:05ID:???extractで展開していると
予期しない変数を書き換えられる危険がある。
例えばパスワードを$passに設定している場合に
hogehoge.com?pass=〜
でアクセスされ、これをextractで展開すると…。
↑はgetの場合だけれど
ローカルでフォームを書けばpostだって送りつけられるし。
0960nobodyさん
2006/02/24(金) 04:00:42ID:???見たいに
example.com?pass=5
しか想定しないでextractすると、下のURLみたいなアクセスをされた場合に大量に変な変数作られるのが危険て事?
example.com?pass=5&user=hoge&db=example.com
予期しない変数を大量に作られるのは気持ち悪いね
でも、プログラムの一番最初にextractすれば変数の内容は上書きされないような気もするけど・・
0961nobodyさん
2006/02/24(金) 04:24:48ID:???0962nobodyさん
2006/02/24(金) 06:38:31ID:???http://jp2.php.net/manual/ja/function.extract.php
警告
extract() をユーザー入力 ($_GET, ...) のような信頼できないデータについて使用しないでください。
もし行う場合、例えば register_globals を信頼しているような古いコードを一時的に実行したい場合、
EXTR_SKIP のような extract_type の値が上書きされていないことを確認してください。そして php.ini の
variables_order で定義されたものと同じ順で展開すべきであることに留意してください。
ま、他人のサーバがどうなろうが知ったこっちゃ無いが
0964nobodyさん
2006/02/24(金) 08:35:07ID:???$data=$_POST['data'];にしとけばいいってこと?
他人のスクリプト見ると、
extractを使うのが一般的だとか思っちゃうけど…
0967nobodyさん
2006/02/24(金) 10:24:28ID:???0968nobodyさん
2006/02/24(金) 12:03:24ID:???それは過去の遺物。
大昔(と言ってしまおう)のPHPがデフォルトでextractと同等のことを自動的にする仕様だったんで、
その頃からPHPで物作ってる人は互換性のためにextract使っちゃうのよ。
で、そういうプログラムって過去の実績は多数あるんで、さらに巷で大量に流布しちゃって
それを真似する素人プログラマがまた問題があるままパクって傷を広げてしまうんだな。
0969nobodyさん
2006/02/24(金) 12:05:01ID:???別にextract関数自体が問題あるって話ではないわな。
でもクエリーの展開以外にextractを使う人ってほとんどいないけどなw
0973nobodyさん
2006/02/24(金) 12:52:58ID:VruGZZOM解析って出来ないのでしょうか?
0976nobodyさん
2006/02/24(金) 14:56:56ID:j/2+6+fN取得できなくて困っています。GETは取得できます。
<input type="submit">だと、POST/GET両方普通に取得できます。
0980973
2006/02/24(金) 15:32:05ID:???おお、なるほど。本当にソースダウンロードしてって感じですね。
大きいサイトでソースを公開しているところって殆どないですよね?
SNSなどでソース公開しているところってご存知?
0981nobodyさん
2006/02/24(金) 15:40:10ID:???実行処理の後にwindow.closeとか書いても電卓が消されないと下の処理に移動しません。
system("calc.exe > /dev/null &")
とかもやったのですがこっちは電卓が画面に表示されませんでした。
どうすればよいのでしょうか?
0983nobodyさん
2006/02/24(金) 17:15:42ID:aTqN8USg外部のサイトを読み込み、文字コードを変換して出力したいのですが
どうしてもエラーの表示が出てしまいます。
多分、とてつもなく馬鹿な事をしているのだと思いますが…
この場合、どのようにしたら良いのでしょうか?
ヒントだけでも頂けたら幸いです。
下記、エラーが出たもの
<?php
$max =30;//MAX件数
$arr = file("http://pc8.2ch.net/php/subback.html");
$lines = $arr;
$lines = mb_convert_encoding($lines, "UTF-8");
for($i = 0; $i < $max; $i++)
echo $lines[$i];
?>
0985983
2006/02/24(金) 17:20:12ID:???実際のものは<html><head><meta>系タグを抜いた、
<li><a>テキスト</a></li>\n
といった固定の形式のものが並んでいるのみです。(読み込み先はSJIS)
>>984
すみません。
phpのエラー表示ではなく、
なぜか一言、白い画面に「Array」と出るのみです
0986nobodyさん
2006/02/24(金) 17:33:56ID:???$lines[$i]が配列なだけ
変数がどういう値もってるのかいろんなとこでvar_dump()してみろよ
0987nobodyさん
2006/02/24(金) 17:58:16ID:???>$lines = mb_convert_encoding($lines, "UTF-8");
ここがおかしい。 mb_convert_encoding()がパラメータに
どのような型を取りうるのか確認。
0988nobodyさん
2006/02/24(金) 18:05:03ID:???2時間も何を検索してたん
<?php
$max =30;//MAX件数
$lines = file("http://pc8.2ch.net/php/subback.html");
//$lines = $arr;
//$lines = mb_convert_encoding($lines, "UTF-8");
for($i = 0; $i < $max; $i++)
echo mb_convert_encoding($lines[$i], "UTF-8", "sjis");
?>
0990nobodyさん
2006/02/24(金) 20:11:38ID:???確かにNoticeがでるな
$lines = mb_convert_encoding($lines, "UTF-8");
Notice: Array to string conversion in ****.php on line *
0991nobodyさん
2006/02/24(金) 20:13:31ID:???1行目に、
error_reporting(E_ALL);
を記述しておきましょう。デバッグに役立ちます。
0993nobodyさん
2006/02/24(金) 21:03:11ID:???他にいい資料置いてるとこない?
0994nobodyさん
2006/02/24(金) 21:29:00ID:???こことか・・・
0996nobodyさん
2006/02/24(金) 21:55:52ID:???0997983
2006/02/24(金) 22:04:04ID:???>>986-991
皆さん本当にありがとうございます。
自分はまだforの扱いすらあやふやな所があり論外なレベルなので
皆さんのレス保存して、根っこから勉強しつつやってみます。
ありがとうございました。
0998983
2006/02/24(金) 22:07:26ID:???どこか間違ってたらごめんなさいね
【PHP】下らねぇ質問はここに書き込みやがれpart17
http://pc8.2ch.net/test/read.cgi/php/1140786348/l50
1000nobodyさん
2006/02/24(金) 22:13:27ID:???本当にありがとうございました。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。