【PHP】質問スレッド Part4
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/06/02 15:32ID:f3afNVBG<<参考>>
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレは>>2を見よう。
0413nobodyさん
02/07/18 13:22ID:???php4.2.1使ってます。
常にTrack_vars=Onなので
$HTTP_*_VARS
使えます。
http://www.php.net/manual/ja/language.variables.external.php
0414nobodyさん
02/07/18 18:20ID:???メールで投稿した日本語文字列をDBにinsertして、結果を出力させています。
(DBのコードはEUC)
DBに格納されている内容をコンソールで見ると、正確に出力されているのですが、
ブラウザで確認すると一部の文字だけが文字化けして出力されます。
なお、ブラウザからform投稿したものは、ブラウザで見ても正確に出力されます。
メールで投稿した内容を、一度mb_convert_encodingにかませて
EUCに変換しているのですが、mb_conbert_encodingに不具合があるのでしょうか?
ちなみに文字化けする文字は「詮」です。
0415nobodyさん
02/07/18 18:23ID:???うああああ。ふたつめのmb_convert_encodingのつづりが違う・・・・。
0416nobodyさん
02/07/18 22:39ID:17eHgoJQredhat7.2 php 4.2.1 でregister_globals=Offです。
a.phpで
<form metod="post" action="pope.php">
名前:<input type="text" name="hhh">
によって取得したデータを
を
b.phpの
<?php
echo (htmlspecialchars($_POST['hhh']));
?>
で画面に表示出来ないのです。しかし、アドレスの所にはデータを拾っている形跡があります。
register_globals=onにしてhtmlspecialchars($hhh)は動作します
register_globals=offでも
ほかのスクリプトで
urlencode($_POST['keywd']);
で動かしている所は反応してくれるのですが
なにか間違っているところがあったら指摘してください。お願いします。
0417osage
02/07/18 23:41ID:dRuvmx6aつっこみどころ満載なのだが・・・
・ a.php の action が pope.php
・ metod ってなによ?「めとっど」って読むんですか?
pope.php → b.php
metod → method
まじめにやれ
>>414
PHP USERS の ML か PostgreSQL の ML に「詮」が
文字化けするって言うそのものズバリがあったと思った。
#念のため、両方とも日本の方の ML です。
0418nobodyさん
02/07/18 23:52ID:???echo $_GET['aaa'];
を試したの?
こうなったら全部やれ
echo $_GET['aaa'];
echo $_GET["aaa"];
echo $_POST['aaa'];
echo $_POST["aaa"];
0419nobodyさん
02/07/19 00:18ID:???漏れは仕様にもよるけど、とりあえずユーザーがインプットした
データをアウトプットする時は、htmlspecialcharsなんかで
クリーニングしてるけどこれだけで足りてるのかな?
(もちろんインプット時にクリーニングする時もある)
「漏れはこうしてるよ」とかアドバイス希望。
0420412
02/07/19 01:04ID:sCoO02TZなんで俺にいろいろとレスが付くんだ・・・
>>413
あなたは318ではなさそうなのでTrack_varsがOnだろうがOFFだろうが知りませぬ。
私が言ったのは4.2.0以降はTrack_varsがデフォルトでOFFですよって指摘。
>>418
試してませんけど明らかに「括弧」が
{ }
じゃなくて
[ ]
だろ、と思ったので指摘したんです。
ちなみに自分もシングルクォートよりダブルクォート派ですな。 ["aaa"]
0421nobodyさん
02/07/19 02:43ID:inSEDcSk[aaa]派だな。
0422パイの魅学園
02/07/19 02:43ID:Tb+P4mAu/ ̄ ̄ ̄ ̄ ̄ ミ
/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| \_/ / < http://csx.jp/~madrix/
/| /\ \__________
0423osage
02/07/19 02:53ID:aQSDFnic漏れはインプット時にクリーニングは全くしない。
クリーニングが必要なのは出力時でしょ?
PHPのサンプルはなかったけど、
これを参考にしています。
http://www.ipa.go.jp/security/awareness/vendor/programming/a01_02.html
とりあえず、既知のXSSならこれで何とかなると思ってる。
0424nobodyさん
02/07/19 05:56ID:6KPWLgZHどんな感じにすればいいの?
教えてください。
0425nobodyさん
02/07/19 06:32ID:EQKcew3/0429nobodyさん
02/07/19 08:33ID:???0431nobodyさん
02/07/19 10:51ID:u7hqhJZWPHPファイルから検索したいのですが、どうもうまくいきません。
Select * from hoge where = 'モナー';
が、テラターム上では通っても、PHP上からでは
上手くいかないです。
ちなみに、半角では実行できています。
原因わかるようでしたらお願いします。
0432413
02/07/19 11:32ID:???>4.2.0以降はTrack_varsがデフォルトでOFF
track_varsは常にOnです。Offにできません。
register_globalsがデフォでOffです。
0433nobodyさん
02/07/19 12:23ID:???レスありがとございます。
http://www.ipa.go.jp/security/awareness/vendor/programming/a01_02.html
を読んでみましたが大変参考になりました。
場合にもよりますが、htmlspecialcharsでこと足りそうですね。
0434nobodyさん
02/07/19 12:53ID:miP7fSIKHTMLのイメージタグ<img*>を全てhogeに置き換えたいのですが
うまくいきません。
正規表現がまちがっているとおもうのですが
教えてもらえませんか?。
厨房ですみません。
0435nobodyさん
02/07/19 13:01ID:???0436nobodyさん
02/07/19 13:18ID:miP7fSIKそれもしましたが、うまくいかないのですよ。
どうすればいいのやら。
0438420
02/07/19 15:56ID:fBLe97tyうぐ、すまなかった
勘違い
でもどっちにしろ$HTTP_*_VARSは旧式で将来のバージョンでは廃止の方向にあるってアナウンスされてるから
これから覚える人もそうでない人もスーパーグローバルの$_*で覚えた方が吉。
まだ古い形式をサポートしてあげてますよってスタンスだね。
0440j
02/07/19 16:01ID:YbGh4YAD0441nobodyさん
02/07/19 23:49ID:miP7fSIK$lipton = eregi_replace("<img.*>", "hoge", $lipton);
でしてみたら イメージタグの後ろすべてがなくなってりまいました。
どうすればイメージタグだけとりだせるのでしょうか?。
厨房のすみませぬ。
0442nobodyさん
02/07/20 00:04ID:???0443420
02/07/20 00:05ID:fSI+96Dt最短マッチというやつを使う。
$lipton = preg_replace("/<img(.*?)>/i", "hoge", $lipton);
>>412 の時と同様、試してないのと想像でものを書いているのとで
違ってるかもしれない。
ちなみにpregなのは単に私がpreg派だから。
0444osage
02/07/20 00:57ID:qMVNIFsj>>426
書込時にXSS対策してしまうと、
新しい XSS が見つかったときに対策できなくなったり、
ファイル → DB ができなくなったり(変換後の長さが不定)、
良いこと無いです。
>>433
HTML BODY の部分は htmlspecialchars でほとんど事足りますね。
リンクの場合だけ、面倒。
>>443
漏れも preg 派。
preg のほうが ereg より早いんじゃなかったっけ?
0445nobodyさん
02/07/20 02:03ID:mTlsfDxx>>444
ありがとうございました。
解決できました。
<img hoge><a hoge>
こんなときでもOKかすこし不安です。
0446420
02/07/20 07:12ID:dxQFeTg1そう、速いはず。
それと、pregで慣れてしまってeregに弱くなってしまった。ってのもある。
微妙に文法違うので。
0447420
02/07/20 07:16ID:???試してみればよろしいかと。
色んなパターンで。
しかしこの2ch鯖はPHP/4.0.3pl1載せてるんだね、なんか微妙なバージョンだね。
あまり2chの詳しい部分には詳しくないので疑問だけど、
2chのどこかでPHP使われてるのかな。
ただ組み込まれてるだけか。
0448nobodyさん
02/07/20 13:22ID:???PHPではフォームの要素やCookieが「$名前」って言う感じになるらしいですが
フォームの要素名とCookie名が重複した場合はアボーンですか?
0451nobodyさん
02/07/20 21:16ID:3Kq04NJBPHPももう一回コンパイルしたほうがよろしいでしょうか?
apacheのapxsはバージョンアップで変わるのですか?
0452nobodyさん
02/07/21 10:09ID:???apacheのインストールの仕方による。
前と同じ場所にインストールしたんなら必要ないし、
$apache_home/conf/httpd.conf も前のものが引き
継がれるので、PHPもそのまんま使える。
0453nobodyさん
02/07/21 19:07ID:???$foo[bar] = 'enemy';
echo $foo[bar];
// 等
これは間違っていますが、動作します。では、なぜ間違っているのでしょ う? その理由は、構文の節に記述したように、角括弧の間 ('['および']')に式がなけれ ばならないためです。これは、次のように書くことが可能であることを 意味します。
echo $arr[ foo(true) ];
$_GET[aaa(true)];
はどうよ。
0454osage
02/07/21 21:39ID:???意味を取り違えていません?
当然OKですよ。
---ここから
<?
echo $_GET[aaa(true)];
echo $_GET[aaa(false)];
function aaa($r){
return ($r ?"mode":"pass");
}
?>
<a href="<?=$_SEREVR['SCRIPT_NAME']?>?mode=333&pass=20">TEST</a>
---ここまで
foo(true) → 式の必要があることの例示
ということだと思います。
0455nobodyさん
02/07/22 03:01ID:???ごめんさい。
0457nobodyさん
02/07/23 12:29ID:???0458nobodyさん
02/07/24 07:39ID:W+N1FBoG掲示板やチャットがおかしな動きをする・・・。仕様変更?
知っている方がいたらどこが変わったのか教えていただきたいです。
0459nobodyさん
02/07/24 08:17ID:???0461nobodyさん
02/07/24 08:44ID:???0462名無しさん@Emacs
02/07/24 11:04ID:???愛想が尽きかけてるなぁ。
0463nobodyさん
02/07/24 11:36ID:F0HR0XI/http://news2.2ch.net/test/read.cgi/newsplus/1027420849/
0464nobodyさん
02/07/24 12:00ID:???0467nobodyさん
02/07/24 14:11ID:???_SERVER["SCRIPT_FILENAME"] /home/local/public_html/info.php
と
_SERVER["PATH_TRANSLATED"] /home/local/public_html/info.php
と
_SERVER["REQUEST_URI"] /~local/info.php
と
_SERVER["SCRIPT_NAME"] /~local/info.php
と
_SERVER["PHP_SELF"] /~local/info.php
ではどれがいいのでしょうか。
どれでもいいような気がしますが。
0468nobodyさん
02/07/24 14:22ID:???0469464
02/07/24 14:31ID:NF1JUK7E0470初期不良
02/07/24 16:10ID:MpezxSYFここを読んだ限りでは...
multipart/form-data のパースに関する脆弱性って
4.2.0 と 4.2.1 だけ?それ以前のものとかは大丈夫って事?
0472_
02/07/24 18:00ID:HHbu9Xg4だけです。
記事に
Software: PHP versions 4.2.0 and 4.2.1
とあるでしょう。
ZDだかどっかの日本語ニュースサイトでわかりやすい日本語の記事で書かれてるからそれ読めば。
あーしょうがねぇな、探してやったよ、これこれ
http://www.zdnet.co.jp/news/0207/23/ne00_php.html
0473nobodyさん
02/07/24 19:07ID:???VirtualHost を利用していると
4.1.3 以降禿げしくバグっているので
当分入れ替えてませんが、何か?
0475nobodyさん
02/07/24 20:40ID:???継承元が違っても同名のメソッドがあれば動きそうなんですが・・・。
class c
{
function hoge()
{
}
}
class d
{
function hoge()
{
}
}
$a = true;
$b = ($a?new c():new d());
$b->hoge();
0476nobodyさん
02/07/24 22:13ID:???PHPのMLも
ApacheのMLも
バージョン変わるたびに
「入れ替えたら動かなくなりますた。」
というヤシが多すぎるやね。
0477476
02/07/24 22:17ID:???更新前に書き込んでしまいました。
超遅レス・・・ウトゥダ
0479nobodyさん
02/07/24 22:47ID:???0480__
02/07/24 22:48ID:SFB7+LmWテキストボックスに「表」を入れて$_POSTで受け取ると
「表\」と\が付いてきてしまいます。\を取る方法はありますでしょうか?
送信ページにはcharset=shift_jisを付けています。
0481nobodyさん
02/07/24 23:05ID:???現環境はRedhat7.3+PHP4.2.1(ソースからインストール)です。
ttp://www.php.net/downloads.php
の「PHP 4.2.1 to 4.2.2 patch」を充てたいのですが、実行の
仕方がわかりません。中を見るとbashでもCでもないようですが・・・
厨な質問だとは思いますが、識者の方よろしくお願いします。
0482osage
02/07/24 23:19ID:uiOwupG6データベースにクエリ投げるためのエスケープが入ってるのでは?
設定見てみ。
magic_quotes_*
PHP + SJIS であまりよい思いたこと無いけどな。
>>479
例えば?
0483479
02/07/24 23:34ID:???僕の借りてるとこは register_globals が on だったので、なんとか off にしたかったのです。
が、色々検索した結果↓のように ini_set(name, value) でできることがわかりました。
ttp://www.dcl.info.waseda.ac.jp/~hasegawa/php/source/d_bbs/d_show_contents.php?print_number=779
その発言主さんのように、各PHP毎に ini_set 埋め込んでおけば php.ini いじらなくても
設定としては大丈夫なんでしょうか?
0484479
02/07/24 23:36ID:???専用鯖だったら好きなだけいじくれますから・・・
0485nobodyさん
02/07/24 23:52ID:sGd5+TPw0486osage
02/07/24 23:56ID:uiOwupG6ここを見るとできないとかいてある気が・・・
http://www.php.net/manual/ja/print/function.ini-set.php
できない仕様だけど、できる実装?
0487nobodyさん
02/07/25 00:02ID:???うおっ、ありがとうございます。こんなマニュアル中のを見落としててすみません。
そこの表を見ると
register_globals PHP_INI_SYSTEM | PHP_INI_PREDIR
ってあるんで、管理者によっては .htaccess で設定可能にしてくれているかもしれない
ということですよね?
ちょっとテストしてみます。ありがとうございます。
0488nobodyさん
02/07/25 00:02ID:HI+0mZ5Kphpのコーディングは、Atudionで書くってのがイイ!。
0489osage
02/07/25 00:14ID:HWPrqYxJマニュアルよく見ると、「PHP 4.0.5-devにおける」って書いてある。
今ちょっとやってみたけど、挙動がおかしいような・・・
ini_set した後、 ini_get すると値が更新されている。
でも、POSTした値グローバル変数でとれていない・・・
( 環境:Apache 1.3.26, PHP 4.2.2, RedhatLinux7.2 )
ま、いっか本人解決したみたいだし。
0490nobodyさん
02/07/25 03:20ID:???> ini_set した後、 ini_get すると値が更新されている。
> でも、POSTした値グローバル変数でとれていない・・・
変数に落ちる前に ini_set してやらなあかんやろ。
つまり無理。
0491osage
02/07/25 06:12ID:???いや、そりゃそうなんだけど、
マニュアルには、ini_set 失敗したら false を返すと書いてあるのに、
変更前の値を返しているし、
ini_getで変更後の値返しているし、
動作がマニュアル通りじゃないなと。
0492nobodyさん
02/07/25 12:41ID:???{
$data = new sample();
return $data;
}
$x = a();
$x->samplefunc();
こういうことがしたいんですが無理でしょうか?
0493nobodyさん
02/07/25 17:46ID:sqY3Q+5C'./configure' '--enable-mbstring' '--enable-mbstr-enc-trans'
mbstring.detect_order : auto
mbstring.http_input : auto
mbstring.http_output : EUC-JP
mbstring.internal_encoding : EUC-JP
phpはEUCコードを出力する設定となっています。
i-mode用にコンテンツを作成しようと思い、
jcode.php、mb_convert_encoding() を利用してSJISに変換して出力してみたのですが
文字化けしたままです。
http://www.php.net/manual/ja/ref.mbstring.php
を参考に mb_http_output('SJIS') 等を試してみましたが正しい結果は得られません。
レンタルサーバなので php.ini の設定変更は出来ないのですが、
この状態でもSJISに変換する方法はあるのでしょうか?
0494nobodyさん
02/07/25 20:37ID:???0495493
02/07/26 11:04ID:5bPyLDTsmetaタグ及び、header関数でContent-typeを出力しています。
phpソースはEUCにて記述しております。
0496nobodyさん
02/07/26 11:18ID:gCODudNKを行うシステムをphpで作っているのですが、ログイン後のURLで
ショートカットを作られてしまうと、ログインしなくても、そのページに
行ってしまいます。これを防ぐために、hidden等で、IDだけをページ間
に持たせて、チェックを行おうと思ったのですが、文字でリンクされている
為、submitが発行できず、hiddenが使えません。何かいい方法な無いでしょうか?
0498493
02/07/26 12:28ID:5bPyLDTshttp://www.nttdocomo.co.jp/p_s/imode/tag/index.html より転載。
・ HTML2.0、3.2、4.0のサブセットです。
・ 文字コードはS-JIS、画像はGIFのみ表示可能です。
P504i にて確認しましたが、EUCのままでは文字化けします。
0499nobodyさん
02/07/26 12:38ID:ChVpo9octtp://www.spencernetwork.org/jcode/
0500nobodyさん
02/07/26 12:43ID:6EBIoW5e・<pre>タグの中は変換しない
・特定のタグでなければ <>を < > に変換する。
というものが欲しいのですが・・・。
0501500
02/07/26 12:45ID:6EBIoW5e・特定のタグでなければ <>を &lt; &gt;に変換する。
です。
0502493
02/07/26 12:57ID:5bPyLDTs以下でテストしました。文字化け変わらずです。
ソースはEUCにて記述しています。。
<?php
require("./jcode-LE.php");
header("Content-type: text/html; charset=Shift_JIS");
$str = '<html><head>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<title>サンプル</title></head>
<body>あいうえお<br>かきくけこ</body></html>';
echo JcodeConvert($str, 1, 2);
?>
0503nobodyさん
02/07/26 13:52ID:???$string = strip_tags($string, '<a><b><i><u>');
これじゃだめかい
タグごとなくなるけど。
0504493
02/07/26 14:35ID:???しかし、いくつか不明な点があります。PHPマニュアルのサンプルでは
mb_http_output('SJIS') と ob_start('mb_output_handler') の二つは
セットで使われていましたが、テストしたところ文字化けします。
>>5 にある問題かとも思い、header() を外してみても変わらずで
結局、ob_start('mb_output_handler') を外して上手くいきました。
現状では問題点はありませんが、mb_output_handler が無い場合の
弊害はあるのでしょうか。
<?php
mb_http_output('SJIS');
//ob_start('mb_output_handler');
header("Content-type: text/html; charset=Shift_JIS");
$str = '<html><head>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<title>サンプル</title></head>
<body>あいうえお<br>かきくけこ</body></html>';
echo $str;
?>
0506nobodyさん
02/07/27 05:04ID:LNAsRVTZレスではないのですが、少し関係ありそうなので聞きたいのですが、
私もDebian(woody) + apache + php4の環境で同じ問題で悩んでいて
header("Content-type: text/html; charset=EUC-JP");
を吐き出して正常に表示できるようなりましたが、上記のheader関数を使わず
HTMLのメタタグでEUC-JPを吐き出しても、文字化けして正常に表示できませんでした。
echo "<html><head><meta http-equiv='Content-type' content='text/html;charset=EUC-JP'></head>";
echo "<body>";
echo "はろー";
echo "</body></html>";
この違いは何でしょうか?分かる方がいたら教えてください。
0507nobodyさん
02/07/27 19:10ID:???記述ミスでは。
<meta http-equiv='Content-type' content='text/html; charset=EUC-JP'>
0508nobodyさん
02/07/27 22:38ID:q4+cqwKGデータ大きくなってphpへ移行しようと考えているッス。
APACHEのモジュールとして組み込むべきなのか、コマンドライン版として組み込むべきなのか。
既出かもしれんスが 検索かけたッスけどAPACHEのモジュールとして入れた方が早いとかぐらいしか
ひっかからなかったので違いやそれぞれのメリット意見を聞きたいッス。
スピードとかセキュリティ等の点を特にッス。
一応PHPのマニュアル読んだけど、よくわからなかったッス。
個人的にはそれほどスピードが変わらないのであればcgi-bin中につっこめた方が
楽なんスが、スピードが極端に落ちる場合はそうもいかんスので
環境はredhot7.2ッス。mysqlはインストしたんスけど、この件に関しては使用しないと仮定ッス。
0509nobodyさん
02/07/27 23:53ID:???両方入れて使用目的によって分けてますが。
何に使うかによるので一概には言えないかと。
redhotってナニ?ネタでスか?辛そうだね。
0510nobodyさん
02/07/27 23:54ID:???書いてあったね使用目的。スマソ。
0511nobodyさん
02/07/28 00:20ID:UzcbNVGt関係ありませんでした。
0512nobodyさん
02/07/28 13:06ID:???共用鯖でなければCGIで動かすメリットはほとんどないと思う。
速度を考えるならZendOptimizerも入れておくと良し。結構高速化できる。
CGI使う場合の利点は
suexecでApache以外のユーザでスクリプトを実行できる
くらいしかないかと。
コマンドラインでphp使いたい場合は両方入れとけばいいだけだし。
0513nobodyさん
02/07/28 20:08ID:???別ユーザ権限として実行することはできませんか?
■ このスレッドは過去ログ倉庫に格納されています