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

このエントリーをはてなブックマークに追加
952nobodyさん:2009/12/06(日) 23:52:36 ID:???
>コンピュータ業界で、そんなことが許されたのは、
許されないのはCOBO・・・おっと。

新しいバージョンに入れ替えてどうなるか調査しないで
モンク垂れることが許される業界は、コンピュータ業界
には無いな。
953nobodyさん:2009/12/07(月) 00:20:44 ID:???
年寄りをからかっちゃダメw
954nobodyさん:2009/12/07(月) 00:30:26 ID:???
てか、PHP4でも$_POSTは使えるんだがって誰も書いてねえ
955nobodyさん:2009/12/07(月) 00:32:14 ID:???
いやそういう話じゃないから・・・
956nobodyさん:2009/12/07(月) 01:06:00 ID:???
PHP5から始めてよかったwwwwww
957nobodyさん:2009/12/07(月) 02:12:36 ID:???
PHPはじめなければ良かった…
958nobodyさん:2009/12/07(月) 03:23:16 ID:???
PHP4だと直接変数で受け取ってたのか・・
959nobodyさん:2009/12/07(月) 04:09:41 ID:Q2sf5+Ka
mail()関数で簡単なメールを送信したんですが送られてきません

関数部分の内容は
mail('****@gmail.com', 'My Subject', "testFromMail"); ってだけです。
php.iniを確認すると、sendmail_path = /usr/sbin/sendmail -t -i となっています。
ためしに "/usr/sbin/sendmail -t -i" と"で囲んでも同じ結果でした。

何が問題と考えられますか?
どこがおかしいか、可能性を教えてもらえると幸いです。
宜しくお願いします

環境は、centOS5.3 apache2 php5.2.6
macのvmware-fusion上で動かしています。
960nobodyさん:2009/12/07(月) 09:07:04 ID:???
メール送信のみのプログラムを走らせる
PHPのエラーは全て拾う
エラーが無かったらメールログを見る
正常に送信してたらスパムフィルタを疑う
スパムフォルダ等になければ遅延を疑う
961nobodyさん:2009/12/07(月) 10:48:28 ID:???
>>960
ありがとうございます
アパッチのエラーログには異常がないので、メールログに何か書いてあるみたいですが読み方がわかりません
スレ違いは承知していますがSENDMAILのエラーログの解説してるサイトを教えてもらえないでしょうか
もちろんググったんですが、似たような質問ばかりでてきて肝心のリンク先が切れてるのばかりで…

気に障ったら無視してください、引き続き自分でも探しますので
ありがとうございました
962nobodyさん:2009/12/07(月) 11:06:03 ID:???
test
963nobodyさん:2009/12/07(月) 11:08:02 ID:???
うん、自分で探せ
964nobodyさん:2009/12/07(月) 15:32:12 ID:???
ログなんて数行なんだからだいたいは読み取れるだろ
あと忘れてたけど自宅鯖なの?ポート25では直接送れないのかもね
ログの件もそうだけどわからなかったら自宅鯖のくだ質行ってください
965nobodyさん:2009/12/07(月) 18:42:01 ID:???
三項演算子みたいに
$a = ($b===0)?0:1;
な感じで、
$a = if($b===0){0;}else if($b===1){1;}else{2;}
と言う風なことができたらいいなと思ったんですがsyntax errorが出てしまいます。
ふつうにif($b===0){$a=0;}else if($b===1){$a=1;}else{$a=2;}
でもいいのですが、どうにかできないものでしょうか
よろしくおねがいします。
966nobodyさん:2009/12/07(月) 18:42:49 ID:0YQe80X3
id
967965,966:2009/12/07(月) 18:43:47 ID:0YQe80X3
 
968nobodyさん:2009/12/07(月) 18:55:21 ID:???
$a = $b <= 1 ? $b : 2;
969nobodyさん:2009/12/07(月) 19:29:56 ID:???

$a = ($b===0) ? 0 : ($b===1) ? 1: 2;
970969:2009/12/07(月) 19:31:15 ID:???
あ、>>968でいいのか・・・
すまん
971nobodyさん:2009/12/07(月) 19:47:39 ID:???
全然良くないじゃん
-1だったら?
972nobodyさん:2009/12/07(月) 20:03:31 ID:0YQe80X3
>>968
この数字だとニュアンスが伝わらなかったですね・・
すいませんでした。
$a = if($b==='a'){0;}else if($b==='b'){1;}else{2;}
というような感じに書きたかったんです。
>>969
ありがとうございます。
なるほど三項演算子の入れ子っぽい感じでしょうか
しかしさっそく

$b='a';
echo 'a='.$a = ($b==='a') ? 0 : ($b==='b') ? 1: 2;

として試してみたところ
$aは2になってしまいました・・

$b='b' のとき、 $a=1 。
$b='c'とした場合や、$bが未定義のときは$aは2になってくれました。

そこで調べてみると、ネストした三項演算子の挙動とその対応策
というサイトに行きついて対応策が書かれていたので
分岐が少ないうちは()でくくろうかなと思います
ありがとうございました。
973nobodyさん:2009/12/07(月) 20:08:37 ID:???
switchでも使ったほうが良さそうだけど。
974nobodyさん:2009/12/07(月) 20:17:18 ID:???
参考塩山市のネストは醜いです
なので私もswitch推奨
975nobodyさん:2009/12/07(月) 20:35:16 ID:???
>$a = if($b==='a'){0;}else if($b==='b'){1;}else{2;}
一行でちゃちゃっと書きたいんだろうけど、その発想は後々後悔する
複雑なら関数(メソッド)化したほうがいいと思う
976nobodyさん:2009/12/07(月) 20:38:28 ID:???
PHPでワンライナーとか…。悪いことは言わん、やめとけ
977nobodyさん:2009/12/07(月) 22:33:22 ID:Uy2a15lY
hoge1フォルダの中にあるファイルにアクセスしたときに
hoge1フォルダからの相対アドレスを取得したいのですが、
どのようにやったらいいでしょうか?
978nobodyさん:2009/12/08(火) 00:06:57 ID:???
echo RelativePath("/hoge2/hoge3/hoge1" , "/hoge2/hoge3/mydir" );

function RelativePath( $basePath , $targetPath) {
$basePath = ereg_replace("/$","",$basePath);
$targetPath = ereg_replace("/$","",$targetPath);
$basePath = ereg_replace("^/","",$basePath);
$targetPath = ereg_replace("^/","",$targetPath);
$base = explode("/",$basePath);
$target = explode("/",$targetPath);
$targetCount = count($target);
$baseCount = count($base);
for ($i=0;$i<$targetCount and $i<$baseCount;$i++){
if ( $base[$i] == $target[$i] ){
unset( $target[$i]);
unset( $base[$i]);
}
}
if (count($base) ==0)
$path ="./";
else
$path = str_repeat("../", count( $base ));
$path.= implode("/",$target);;
return $path;
}
979977:2009/12/08(火) 00:16:54 ID:???
>>978
すごい
うまく取れました
ありがとうございます
980nobodyさん:2009/12/08(火) 00:51:08 ID:???
よく質問の意図がわかったな
感心するわ。
俺ならちゃんと説明しろって答えてたな
何言ってるかわからんかった
981nobodyさん:2009/12/08(火) 01:33:43 ID:???
>>980
普通に分かるが・・・
982nobodyさん:2009/12/08(火) 09:39:14 ID:???
crypt() の仕様変わってる?
下のコードで $password が 3 文字以下だと $str1 == $str2 にならん。

$password = 'aaa';
$str1 = crypt($password);
$str2 = crypt($password, $str1);
echo $str1 . "\n" . $str2;

▼出力結果例(PHP 5.3.1 / Win7 64bit)
$1$Vd5.4a3.$y6Jjb8HaT6UzUwuzlHCKp1
$1$Vd5.4a3.$eOEyiWRgt1JKH9FUKpJW60
983nobodyさん:2009/12/08(火) 09:47:14 ID:???
crypt ( string str, string [salt])

strは暗号化する文字列(8文字以上は同じになるので8文字まで。)
saltは暗号化するための2文字の文字列です。これはプログラム内に指定します。
saltによって返り値は変化します。また、返り値の最初の2文字にsaltが含まれ、その後の11文字が暗号化文字列になります。
984nobodyさん:2009/12/08(火) 09:55:49 ID:???
つ CRYPT_SALT_LENGTH
985nobodyさん:2009/12/08(火) 10:08:19 ID:???
例が分かり辛かったかも知れない。
要するに、

crypt($password, '$1$zA/.AE/.$KwOIKMK9oPvXu6ybBNj/d/');

を複数回試行した時、$password が 4 文字以上の場合は常に同じ値が、
3 文字以下の場合は毎回異なる値が返るって話で。
986nobodyさん:2009/12/08(火) 10:14:57 ID:???
だから CRYPT_SALT_LENGTH
987nobodyさん:2009/12/08(火) 10:42:12 ID:???
すまん。やはり CRYPT_SALT_LENGTH は関係ないと思うんだが…

CRYPT_SALT_LENGTH == 60
CRYPT_STD_DES == 1
CRYPT_EXT_DES == 1
CRYPT_MD5 == 1
CRYPT_BLOWFISH == 1

$password = 'aaa';
crypt($password, 'rl.3StKT.4T8M'); // Standard DES。毎回同じ結果。
crypt($password, '_J9..rasmBYk8r9AiWNc'); // Extended DES。毎回同じ結果。
crypt($password, '$1$rasmusle$rISCgZzpwk3UhDidwXvin0'); // MD5。毎回違う結果。
crypt($password, '$2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi'); // Blowfish。毎回同じ結果。
988nobodyさん:2009/12/08(火) 10:49:08 ID:???
>>987
md5のsaltが変なんだけど。なんで$で終わってないの?
989nobodyさん:2009/12/08(火) 10:51:13 ID:???
$で終わる必要は無いが12文字越えてるのはおかしいな
990nobodyさん:2009/12/08(火) 11:13:17 ID:???
>>988-989
申し訳ない、ただの手抜きです。crypt() の公式マニュアルのサンプルコードでは、
crypt() 済みの文字列から salt 部分を切り出さずに全文使ってたから、その通りに。

公式のサンプル
$password = crypt('mypassword');
if (crypt($user_input, $password) == $password) { echo "Password verified!"; }

試しに salt を切り出して実行してみたけど、結果は同じ。
ちなみに下のコードを実行したところ…

$password = 'aaa';
$salt = '$1$rasmusle$';
echo crypt($password, $salt) . "\n";
echo crypt($password, $salt) . "\n";
echo crypt($password, $salt) . "\n";
for($i = 0; $i < 3; $i++) { echo crypt($password, $salt) . "\n"; }
for($i = 0; $i < 3; $i++) { echo crypt($password, $salt) . "\n"; }

こうなりました

$1$rasmusle$j.76fUGadpG60PYrj.lpj1
$1$rasmusle$3VBtfb3er4yAzFEKUB2Dy1
$1$rasmusle$PPO.hs4CYwNRgTFYlxOXu/
$1$rasmusle$1wrvgdwXYuAdAc8yapgcG1
$1$rasmusle$1wrvgdwXYuAdAc8yapgcG1
$1$rasmusle$1wrvgdwXYuAdAc8yapgcG1
$1$rasmusle$p4dvB0SB7HcE7HXi1oGhS0
$1$rasmusle$p4dvB0SB7HcE7HXi1oGhS0
$1$rasmusle$p4dvB0SB7HcE7HXi1oGhS0
991nobodyさん:2009/12/08(火) 11:41:37 ID:7sia6qgu
$_POSTにダブルクォート等が含まれていると自動でエスケープ(バックスラッシュが投入)されてしまうのですが、
それをstripslashesを使って削除しようと思い実行したのですが削除できません。

テキストフォームにバックスラッシュ無しで出力したいのですが何か削除する方法はありませんか?
992nobodyさん:2009/12/08(火) 11:47:43 ID:???
>>991
magic_quotes_gpc をoffにはできないの?
993nobodyさん:2009/12/08(火) 11:54:24 ID:7sia6qgu
>>992
解決に導いて下さってありがとうございました
994nobodyさん:2009/12/08(火) 11:55:07 ID:???
// CRYPT_SALT_LENGTH=60

$password='aaaaaa' ;
echo crypt($password, '$1$zA$').'<br />' ;
echo crypt($password, '$1$zA$').'<br />' ;

違う結果になったよ。
995nobodyさん:2009/12/08(火) 12:01:39 ID:???
<?php
function echo_crypt($pw, $s){
echo crypt($pw, $s) ; //.'<br />' ;
}

$password = 'aaa';
$salt = '$1$rasmusle$';
echo echo_crypt($password, $salt).'<br />' ;
for($i = 0; $i < 2; $i++) { echo echo_crypt($password, $salt).'<br />' ; }
?>
これは全部同じ。
crypt()がsaltを補完してて、CRYPT_SALT_LENGTH に対して充分な補完が行われない場合、コード位置によるゴミが入るバグと推測。
996nobodyさん:2009/12/08(火) 12:07:24 ID:???
あるいは、12文字(に関連する数値)に足りない場合に出るバグか。
997nobodyさん:2009/12/08(火) 12:16:51 ID:GGPotsAy
<?php
require_once("Auth/HTTP.php");
$params=array(
"dsn"=>"mysqli://pearusr:pearpass@localhost/pear",
"table"=>"auth",
"usernamecol"=>"username",
"passwordcol"=>"password",
"db_fields"=>"*");
$myAuth=new Auth_HTTP("DB",$params);
$myAuth->setRealm("Pear Sample");  //←ココです
$myAuth->setCancelText("このページは表示できません。");
$myAuth->start();
if($myAuth->getAuth()){
print("ユーザ名:".$myAuth->getAuthData("unam"));
}
?>

申し訳ございませんが、上記のコードの$myAuth->setRealm("Pear Sample"); の部分が分かりません
このPear Sampleという領域名はいったい何を意味して、何の効果(動作)があるのでしょうか?
認証情報を識別するためのレルム名と書かれていますが、何の事かサッパリ分かりません
998nobodyさん:2009/12/08(火) 12:31:27 ID:???
>>997
それはあなたが決めればいい。
ブラウザの認証ダイアログにそのまま文字列として表示されるよ。

サイトに複数の独立した領域を作って、それぞれでぜんぜん違うユーザー名:パスワードで管理したとする。
ユーザーはどっちのユーザー名が有効なのか、領域名で判断するんだ。
999nobodyさん:2009/12/08(火) 12:36:35 ID:???
>>993-994
検証ありがとうございました。
確かに crypt() を記述する行番号によって出力結果が変わりました。
また salt を11文字以下にすると、$password が 4 文字以上でも出力結果が変わりました。
一方で salt の 13 文字目以降は、出力の 13 文字目以降に全く影響しませんでした。

公式のサンプルコードをそのまま使用する場合、
パスワードが 3 文字以下のユーザはログインできないことになりますね。
殆どのサイトはパスワードの文字数に制限をかけてはいるでしょうが…。
1000nobodyさん:2009/12/08(火) 12:42:20 ID:???
>>999
結論は、saltは長めにしましょう、って事ですね。
公式サンプルの通りじゃだめよ、って。

1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。