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

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

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

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

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0207nobodyさん2009/06/26(金) 02:08:36ID:m+lfcOij
>>206
ありがとうございました
0208nobodyさん2009/06/26(金) 02:21:51ID:???
気持ち悪い書き方だな
0209nobodyさん2009/06/26(金) 03:56:41ID:eh6qHIVY
cakephpなんですが

コントローラのメソッドで
function add($id) {

function add($id = null) {
の違いがわかりません。

後者でもURLのパラメータ値がidに入ってくるのに、
nullで初期化する意味はあるのでしょうか?
0210nobodyさん2009/06/26(金) 06:23:17ID:???
http://www.php.net/manual/ja/functions.arguments.php#functions.arguments.default
0211nobodyさん2009/06/26(金) 07:35:12ID:???
Apacheがうまくインストールできません、プロンプト画面が出て\Program Files
でシステムエラーのようなものが表示されます。
0212nobodyさん2009/06/26(金) 07:50:16ID:vbul8rC5
XAMPPとかいったセット使えよ
名前違うかも
0213nobodyさん2009/06/26(金) 07:51:56ID:vbul8rC5
ここにある
http://www.apachefriends.org/jp/xampp-windows.html#2671
0214nobodyさん2009/06/26(金) 10:23:56ID:TMhnu1Td
>>176
if($_POST['A0']=="A0"){
$b=str_rplace=("B0","1",$a);
$b=str_rplace=("B1","2",$a);
print("パスワードは".$b);
}else{
print("操作が間違っています");
}
0215nobodyさん2009/06/26(金) 10:30:30ID:???
えっ
0216nobodyさん2009/06/26(金) 11:22:27ID:Ht+rgjYH
オウム手配犯3人写真 
平田 信(44歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/hirata001.jpg
高橋克也(51歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/takahashi001.jpg
菊地直子(37歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/kikuchi001.jpg
0217nobodyさん2009/06/26(金) 13:56:50ID:???
class Test {
function a() {}
}
$t = new Test();

のように new Test() した後に
Test クラスに b メソッドを追加することってできますか?
0218nobodyさん2009/06/26(金) 14:02:25ID:???
不可
0219nobodyさん2009/06/26(金) 14:03:22ID:???
ぐぐったらpeclのrunkit使えばできるらしい
0220nobodyさん2009/06/26(金) 14:13:28ID:???
>>219
ありがとうございます。ですよね。
runkit は凶悪なツールですね。
0221nobodyさん2009/06/26(金) 16:20:28ID:???
pg_query() は try で捕まえられないのでしょうか?

pg_query($db, 'begin;');
try {
pg_query($db, $sql); // ★エラーが発生
}
catch (Exception $e) {
pg_query($db, 'rollback;');
}
pg_query($db, 'commit;');
0222nobodyさん2009/06/26(金) 16:21:28ID:???
それ例外投げるの?
0223nobodyさん2009/06/26(金) 16:24:13ID:???
ですよねー
0224nobodyさん2009/06/26(金) 16:42:12ID:???
Warning: pg_query(): Query failed: ERROR: が捕まえられるわけじゃないんですね。。。
0225nobodyさん2009/06/26(金) 16:45:45ID:???
set_error_handlerかPDO使えばできるよ
0226nobodyさん2009/06/26(金) 17:04:09ID:???
>>225
ありがとうございます!
set_error_handler でうまくいきましたー。
0227nobodyさん2009/06/26(金) 17:25:24ID:???
try のブロック内にいるかどうか判定できませんか?
0228nobodyさん2009/06/26(金) 17:25:48ID:???
なんで?
0229nobodyさん2009/06/26(金) 17:44:17ID:???
>>228
既存プログラムである >>221
一部 try を入れて、>>226 のように

function error_handler($no, $message, $file, $line) {
throw new Exception("[$no] $message at $file:$line");
}

というのを用意しました。

try 外のエラーが error_handler のために
おかしなエラーになっているので、

function error_handler($no, $message, $file, $line) {
$message = "[$no] $message at $file:$line";
if (try 内部か) {
throw new Exception($message);
}
else {
die($message);
}
}

にしたいなと。
0230nobodyさん2009/06/27(土) 03:46:30ID:???
普通ラップするクラス作って begin commit rollback prepare execute とかで
まとめるもんじゃね?
そこで例外投げればいいわけだし。

素直にPDO使えばいいのに。
0231nobodyさん2009/06/27(土) 04:15:49ID:+RIsncnI
セッションファイルを直接読もうと思ってunserialize()したんですが、セッションってserialize()と同じ形式で保存されていないようで(デリミタが微妙に違う?)セッションファイルを直接読む場合どうすればいいのでしょうか?
02322312009/06/27(土) 05:06:52ID:+RIsncnI
自己レスです。こんな感じでできました。

$session_file = "/tmp/sess_5f660455a0c309d48c04b0597144a9fa";
$data = preg_split('/([A-Za-z_][A-Za-z0-9_]*)\|/',file_get_contents($session_file),
-1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
for($i=0;$i<count($data);$i+=2)
$_SESSION[ $data[$i] ] = unserialize($data[$i+1]);
0233nobodyさん2009/06/27(土) 09:21:00ID:???
the requested operation has failed とエラーが出て、apacheとphpの連携が取れない。
システムファイルを修正する前はapacheがちゃんと起動できたのに、誰か助けて〜〜〜〜〜〜!
0234nobodyさん2009/06/27(土) 11:46:01ID:???
php4だったと思います。
GoogleのHTMLを取得して、別に用意したlog.htmlに上書き
という処理をしたいです。

<?php
$lines = file("http://www.google.co.jp/index.html");
foreach ($lines as $l) {
$html .= $l;
}
$inc = fopen("log.html","w");
fwrite($inc,$html);
fclose($inc);
?>

上記コマンドで文法ミスがありますでしょうか?
別問題としてcronを使っているので、cron側の問題でしょうか?
0235nobodyさん2009/06/27(土) 12:25:28ID:???
つスレタイ
0236nobodyさん2009/06/27(土) 12:33:20ID:+txMHXQ4
234,IDだします
0237nobodyさん2009/06/27(土) 12:59:40ID:???
文法ミスがあったらfatal errorが出るんじゃね?
0238nobodyさん2009/06/27(土) 16:34:23ID:nkgcVTu2
質問です
データベースから取り出した文字列を、textやtextAreaの形でブラウザに表示をさせ、
もし変更があれば、変更を入力してもらい、変更があった場合と変更がない場合で
処理をかえるプログラムを作っています。

ここでphpの文字列比較がうまく行かなくって悩んでいます。
データベースから取り出した文字列をセッションで保存(この文字列を以下「A」とします。)
それをブラウザで表示させ、再度入力をしてもらった文字列(以下「a」とします。)
「a」はもちろん入力された後、すぐにhtmlspecialcharsを通しています。
if(strcmp(A,a)==0){
//処理1
} else {
//処理2
}
とすると、何の変更もないのに処理2を行ってしまいます。
なにかうまい方法はないでしょうか?
「A」をhtmlspecialcharsで変換してみてもだめでした。

どなたかご存知でしたらお教えください。
よろしくお願いいたします。
0239nobodyさん2009/06/27(土) 17:33:06ID:???
入力してもらった文字列をhtmlspecialchars通す必要あるの?
表示しないでしょ?
0240nobodyさん2009/06/27(土) 19:26:15ID:???
比較がおかしいなら両方の変数をvar_dump()して見比べればわかるだろうにと
脊髄反射してみる
0241nobodyさん2009/06/27(土) 20:56:19ID:nkgcVTu2
>>239
一応確認のために、入力してくれた値を再表示するので、通してます。
>>240
見比べても、全く違いがないんだけど・・・・
0242nobodyさん2009/06/27(土) 21:27:39ID:???
htmlspecialcharsはDBに入れる前でなく表示する直前にかけれ
0243nobodyさん2009/06/27(土) 21:39:09ID:nkgcVTu2
>>242
とりあえず、試しにhtmlspecialcharsをかけないで試してみた。
でも、変わらず・・・。

ただ、htmlspecialcharsをかけてもかけなくても、文章によっては正常に「同じ」と評価する場合もある。
なんか、だめな文字とかあるのかな?
0244nobodyさん2009/06/27(土) 21:57:17ID:nkgcVTu2
追加
評価している両方の文章の見分けは、やっぱりつかない。
でも文字列にmd5をかけてみたら、違う数字になった。
やっぱりどこかが違っているみたい。
0245nobodyさん2009/06/27(土) 22:15:58ID:???
じゃ問題が再現するコードを出してくれ
0246nobodyさん2009/06/27(土) 22:35:53ID:nkgcVTu2
すみません。自己解決しました。
macの改行文字「\r」を評価するもの同士から削除すると、再現されなくなる。
どうやら昔macで入力したデータは、文字列評価で誤作動を起こすらしい。
0247nobodyさん2009/06/27(土) 22:45:01ID:???
改行コードが違っただけじゃん
0248nobodyさん2009/06/28(日) 00:03:18ID:???
rtrim()は普通やるよな
0249nobodyさん2009/06/28(日) 08:31:21ID:???
DBに入れる時は mysql_real_escape_stringを使うみたいですが、

前にこんな風に使ってる方が居ました。
mysql_real_escape_stringを使ってさらにhtmlspecialcharsも使ってました
0250nobodyさん2009/06/28(日) 10:06:21ID:???
mysql_real_escape_string()はMySQLが正しく受け取れるSQL文になるようエスケープするもの。
htmlspecialchars()は表示するときに無用なゴミを取るもの。
0251nobodyさん2009/06/28(日) 11:38:42ID:???
無用なゴミ・・・?
0252nobodyさん2009/06/28(日) 11:44:31ID:???
んじゃ、HTMLエンティティに変換可能な特殊文字を変換する、で
0253nobodyさん2009/06/28(日) 13:20:28ID:???
それがどう無用なゴミと繋がるの・・・?
0254nobodyさん2009/06/28(日) 16:04:22ID:04jk16zQ
ログイン認証のidとpassをsql使えない鯖なのでdatファイルで管理してるんだけど
他の人から丸見えなんで、隠す方法ってありますか?
0255nobodyさん2009/06/28(日) 16:07:45ID:???
>>254
basic認証が使えないってことは.htaccessも使えないのかな?
使えるならそれで隠せるし
てかパーミッションいじればいいのでは?
0256nobodyさん2009/06/28(日) 16:35:43ID:04jk16zQ
>>255
basic認証で隠せました!
ありがとです
0257nobodyさん2009/06/28(日) 18:07:47ID:P1lH7m+s
mysqlで
テーブル1
a b  c  d  e
1 0 -10 -2  1

とある場合、abcdeの値全部に
値が0より上の場合だけ
-1を足してやりたいのですが、
今まで、phpで値を参照して、0以上なら〜
という風に最低でも5回調べていました。
何かもっと効率的な方法はありますでしょうか
よろしくおねがいします
0258nobodyさん2009/06/28(日) 18:25:56ID:???
それ何のデータ?
0259nobodyさん2009/06/28(日) 18:31:00ID:P1lH7m+s
>>258
全てINT型のデータです
0260nobodyさん2009/06/28(日) 18:33:07ID:???
いやどういう用途?
0261nobodyさん2009/06/28(日) 19:14:05ID:P1lH7m+s
>>260
特に今のところ詳しく考えていませんが、
例えば、eの全ての値の0より上に-1を足す
ならwhere e > 0 で参照して簡単にできていたのですが(縦の値?)、
ふとこれが257の例のように、横の値(1 0 -10 -2 1)が0より上の場合だけ-1を足して
とした場合どうやればいいんだろう、と気になったのです。
で、今まで通り縦の方法をわけてやる方法しかないのかな、と質問してみました。
0262nobodyさん2009/06/28(日) 20:24:17ID:???
MySQLだとSQL文中でifが使えるとかあったような
0263nobodyさん2009/06/28(日) 21:55:28ID:???
UPDATE table SET
a = IF(a >= 0, a - 1, a),
b = IF(b >= 0, b - 1, b),
.....
つーかPHP関係ないな
0264nobodyさん2009/06/29(月) 10:14:56ID:fNGZfwgv
PHPUnitを導入してみたんですけど
テストをブラウザでするにはどうすればいいでしょうか?

コマンドラインだと文字化けした時にコンソールが死んでしまうので
ブラウザでテスト結果を見たいのですが。

ネットで検索しても古いドキュメントばっかりで
3.3でやり方知っていたらお願いします。
0265nobodyさん2009/06/29(月) 11:21:55ID:Q/RyyZ0F
【OS名】WindowsVista
【PHPのバージョン】
【連携ソフトウェア】
【質問内容】
すいません、プログラムの事はよく分からないのですがエラーの内容にPHPと記述されていたのでここにきました、質問させてください

「萌えた体験談コピペ」という2chまとめ系のサイトの記事を開くと
Warning: require_once(Net/Socket.php) [function.require-once]: failed to open stream: No such file or directory in /home/www/moe/HTTP_Request-1.2.4/Request.php on line 47

Fatal error: require_once() [function.require]: Failed opening required 'Net/Socket.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/www/moe/HTTP_Request-1.2.4/Request.php on line 47

このような文が出てサイトが開けません、時間を空けたり再起動したりしましたがまったく変わりませんでした
最近ネット関係でいじった事といえばFireFoxをインストールした位です、ちなみにFireFoxでもIEでも同じ症状がでます
どうすればようでしょう、よろしくお願いします
0266nobodyさん2009/06/29(月) 11:24:22ID:???
>>242 のような
| htmlspecialcharsはDBに入れる前でなく表示する直前にかけれ
というサニタイズするな意見がよくあるけど、
表示する前の htmlspecialchars を忘れるセキュリティホールを本当によく見る。
人間だから 100% は無理だからね。

なのでサニタイズしたほうがバグになっても
セキュリティホールにはならないと思うのだけどどう?
0267nobodyさん2009/06/29(月) 11:46:34ID:???
>>265
あなたのせいじゃないから気にするな
管理者がちょっと恥ずかしい状態になってるだけ
>>266
ありえない
0268nobodyさん2009/06/29(月) 13:36:35ID:fNGZfwgv
>>266
出力の時、全てサニタイズするようにして、HTML出力したいところだけ
明示的にOFFにするようにすればOKだと思います。

それでも100%じゃないというなら、DBに入れる前にサニタイズだって100%とは言い切れないと反論させてもらいます。
02692662009/06/29(月) 13:56:17ID:???
>>268
そういうことです。>出力の時、全てサニタイズ

「表示する直前」の定義によるのですが、
まさに表示する直前に
print htmlspecialchars($var, ENT_QUOTES);
は危険だなと。
0270nobodyさん2009/06/29(月) 14:12:35ID:???
array_map() は配列に対してですが、
ハッシュ ( 連想配列? ) 用の関数はないでしょうか。
0271nobodyさん2009/06/29(月) 14:26:45ID:???
>>270
つ スレタイ
0272nobodyさん2009/06/29(月) 14:36:11ID:lu8+BB9Z
array_map() は配列に対してですが、
ハッシュ ( 連想配列? ) 用の関数はないでしょうか。
( >>271 指定ありがと )
0273nobodyさん2009/06/29(月) 14:39:58ID:???
>>272
array_mapで使えると思うけど?どういう使い方してる?
あとphpの配列は全てハッシュだよ
02742722009/06/29(月) 14:45:07ID:lu8+BB9Z
>>273
$hash = array(
'a' => 'x',
'b' => 'y',
'c' => array(
'm' => 'o',
'n' => 'p',
),
);

$hash = array_map('foo', $hash);

function foo($argv) {
print_r($argv);
}

a や b, c が取得できなくて。
0275nobodyさん2009/06/29(月) 14:53:52ID:???
つarray_walk
02762722009/06/29(月) 15:01:24ID:???
>>275
ありがとうございました。
callback の引数が逆なのには面喰いました。
0277nobodyさん2009/06/29(月) 15:06:21ID:???
ん? >>274で示したサンプルでは
array_map も array_walk も変わらなくないか?

array_walk_recursive を求めてるんだと思ったんだが。
0278nobodyさん2009/06/30(火) 03:41:24ID:DIe+JQtV
下記のコードなんですが、4重エスケープしてると思うのですが・・・
どういう仕組か説明お願いします
function clean ($str){
$str = strip_tags ($str);
$str = htmlspecialchars ($str, ENT_NOQUOTES);
$str = stripslashes ($str);
$str = mysql_real_escape_string($str);
return $str;
}

if(isset($_POST['submit'])){
$username = clean($_POST['username']);
$password = md5(clean($_POST['password']));
0279nobodyさん2009/06/30(火) 08:53:18ID:???
入力された文字列に対して
strip_tagsかけてhtmlspecialcharsかけてstripslashesかけてmysql_real_escape_stringかけて
返しているということ
0280nobodyさん2009/06/30(火) 11:57:57ID:91azNsAM
MySQLの処理で記述ミス等で正常にqueryが実行できなかった場合、
エラーメッセージを出すようにしています。
(例えば「登録できませんでした。管理者にお問い合わせ下さい」的な)

しかし、記述ミスは設計者の問題ですから、そういうメッセージを見せられても
ユーザはわからなですし、他に良い方法が無いのかと思い質問しました。
0281nobodyさん2009/06/30(火) 12:32:00ID:???
日本語でおk。
0282nobodyさん2009/06/30(火) 14:53:51ID:Y8wbyR8h
>>280
「システムの記述ミスです。申し訳ありません。」
0283nobodyさん2009/06/30(火) 16:35:46ID:???
>>280
クエリやエラーの内容にもよるけど「エラーが発生しました。もう一度お試しください。」とか書くしかないじゃん
なるべく客が納得いく表現にケースバイケースで書き換えてさ。
あとはそのエラー画面に管理者宛にエラー内容書いたメール飛ばすプログラムでも組み込んで。
ユーザに「問い合わせてね♪」なんて今時みたことない
0284nobodyさん2009/06/30(火) 22:27:17ID:???
apacheのデフォ設定とか、未だにそんなんだけどな。
英語だけど
0285nobodyさん2009/07/01(水) 05:29:44ID:gkTQFvwH
5.3.0age
0286nobodyさん2009/07/01(水) 11:26:09ID:fkYaARDw
ちょっと質問させてください。
チェックボックスで選択された商品の情報をDBからPHPで取得して
その情報を商品ごとに配列にしてそのままダウンロードする処理を作成したのですが
複数選択された場合のダウンロードはできませんでした。
Javascriptを使わなければならないというところまでは
調べたのですが、どういう記述をしたらいいか分からなくて
困っています。
よろしくお願いします。
JSのスレかPHPか迷ったのですがここに書かせて頂きました。
0287nobodyさん2009/07/01(水) 11:42:24ID:???
mysql_fetch_assocをwhileで回せば複数取れると思うけど?
0288nobodyさん2009/07/01(水) 11:52:55ID:4mfkCgDj
>>286
つまり、1商品データを1ファイルとして扱い、
複数選択の場合は複数のファイルをダウンロードさせたいわけ?
0289nobodyさん2009/07/01(水) 11:55:24ID:fkYaARDw
>>287
よく分かりません。
>>288
そうです。
0290nobodyさん2009/07/01(水) 12:23:50ID:4mfkCgDj
>>289
俺もやったことがないから正確なことは言えないが、ちょっと難しい
商品それぞれにダウンロードボタンを付けるのが妥当だと思う
お役に立てなくてごめんなさい
0291nobodyさん2009/07/01(水) 12:27:59ID:???
複数ファイルを一気にDLさせたいなら、一時ディレクトリに対象ファイルを展開したあとに
ZIP圧縮してそれを、適当なHTTPヘッダつけて送ればいいんじゃね?
0292nobodyさん2009/07/01(水) 12:50:34ID:???
>>287
なんでMYSQLやねん

>>289
もうあれだ。商品ごとにwindow.openしとけw
0293nobodyさん2009/07/01(水) 16:59:02ID:/Z34wosi
wモードでfopenを使って新しい作成をしようとしたところ、
failed to open stream: 許可がありません
というエラーが出ます。
おそらくアクセス権限のエラーと思い、ディレクトリのパーミッションを0755にしましたが、
まだこのエラーが出てしまいます。
他に何か原因があるのでしょうか
0294nobodyさん2009/07/01(水) 17:16:31ID:???
じゃあエスパーしてみせようか
0755ってことはウニックス系鯖だな
で、パーミッション変更はFTPで行ったと・・
つまりFTPユーザとPHP実行(ウェブ)ユーザが別であると
したがって書き込むためには、0777にすればいいんじゃないかと
0295nobodyさん2009/07/01(水) 21:11:34ID:???
その場合はPHPスクリプトがユーザー権限で動いていると?

あるいは、アパッチ権限で動いている?

どっち?
0296nobodyさん2009/07/01(水) 21:24:28ID:???
>>294氏の推測通り、パーミッション変更をFTPで行った前提だと

パーミッションを0755にしたのだから、(ftpユーザと同じ)ユーザ権限で動いていれば
0755の「7」に該当するわけで問題無い。
それで問題あるという事は、PHPはapacheの権限で動いていると思われる。
0297nobodyさん2009/07/01(水) 21:28:57ID:???
それをいきなり確認する方法ってある?
0298nobodyさん2009/07/02(木) 10:11:16ID:???
phpinfo()の表示で User/Groupみりゃいいだろう
0299nobodyさん2009/07/02(木) 10:23:04ID:???
環境の情報が無さ過ぎてなんとも難しいクイズだが
もしサーバー自前でphpをはじめて動かすとかならフォルダのパーミッションも関係あるぞ
/home以下のユーザーフォルダのパーミッション/home/*/public_html のパーミッションが700になってる可能性がある、これも755にしてやらないと動かない
そもそもhello worldが動いているのか?何はできるが何になると出来ない等、問題の切り分けをしていかないと解決しないぞ
0300nobodyさん2009/07/02(木) 17:04:14ID:0lGL3Sc9
複数あるlinuxサーバーで1台だけ5.2.10をソースからインストールし、
その他のマシンではdebianのパッケージ(PHP 5.2.0-8+etch15)を入れているのですが、
ソースから入れたマシンだけ、

filter_var('test..@example.jp', FILTER_VALIDATE_EMAIL);

がfalseにならず、test..@example.jpを返す。

configureはこんな感じ。
./configure --with-apxs2=/usr/bin/apxs2
       --enable-mbstring
       --with-ldap
       --with-imap
       --without-mysql
       --with-libmbfl
       --with-pgsql
       --with-pdo-pgsql
       --with-zlib
       --with-curl
       --with-gd
       --with-kerberos
       --with-imap-ssl

php5のchangelogには仕様が変わったというような記述はないようですし、
何が原因か判る方いますか?
php.iniのどこを確認すべき、とか。
0301nobodyさん2009/07/02(木) 17:39:03ID:???
それはサーバの問題だと思う。RPMから入れれば良かったのに。
03023002009/07/02(木) 18:00:44ID:???
>>300
自己解決。
いや、解決してないけど。

debパッケージ版のソースと見比べたら、
php_filter_validate_email内の正規表現が変わっていました。

実際に両者の正規表現で直接マッチするか試したら、
5.2.10のソース版の方だけ'test..@example.jp'がマッチすることを確認できました。

Cはよくわからないのでこれ以上追えませんでしたが。
0303nobodyさん2009/07/02(木) 18:51:38ID:???
>>302
debianパッチとか見てみた。

> + - CVE-2007-1900/MOPB-45 ext/filter Email Validation Vulnerability

これじゃね? どうもタイムスタンプとか見る限り、debianのメンテナが、
PHPの新版が出るのを待って、そこからバックポートのパッチを作る時間を
惜しんで自分で作ったパッチと、PHPの中の人が作ったパッチとが違うようだ。

危険度highのセキュリティフィックスだし、本家の更新を待たずに独自パッチ作るのは
良いと思うけど、振る舞いが本家と異なるのはダメダ

さぁDebianメンテナにケツを持ち込むんだ。
03043002009/07/02(木) 19:24:29ID:???
>>303
サンクス。

どうも修正原因は2009-02-02のこれっぽい。
http://bugs.php.net/bug.php?id=47282
内容がちょっとおかしいですけど。

e.x.a.m.p.l.e.@example.com

a@com
が通るように修正されたらしい。

自分的にはdebin版(というか5.2.8以前の版?)の動作を期待していました。

> This bug has been fixed in CVS.
と、バグとして処理されているので、それが本来の振る舞いってことでしょうか。
単にFILTER_VALIDATE_EMAILが自分の期待していたものとは違ってたってことですかね...。

lenny版(5.2.6)のソースから件の正規表現を持ってきて使うことにします。
0305nobodyさん2009/07/02(木) 19:40:17ID:???
php 5.3.0でphp_phar.dll使おうと思ったらextにbundleされてないやんけ
0306nobodyさん2009/07/02(木) 20:03:05ID:???
>>305
標準に組み込まれたから見えないだけ。使えるよ。
■ このスレッドは過去ログ倉庫に格納されています