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

くだすれPHP(超初心者用)5

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/11/22(土) 06:36:02ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
http://www.php.net/
http://jp.php.net/



くだすれPHP(超初心者用)4
http://pc11.2ch.net/test/read.cgi/php/1213356756/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
0402nobodyさん2009/01/17(土) 12:00:27ID:???
>>399
最初にifしてるのはなんで?
0403nobodyさん2009/01/17(土) 12:05:09ID:???
>>402
$a = array('a', 'b', 'c');
foreach ($b as $k => $) {}
実行すれば分かる
0404nobodyさん2009/01/17(土) 12:06:47ID:???
>>398
変数ワロタwww
04054002009/01/17(土) 12:11:35ID:???
>>384
あ、ひょっとしたらデストラクタで閉じてるのかもね。と一応>>400に付けたし。
連レスウザいだろうからこの辺で。
0406nobodyさん2009/01/17(土) 12:23:28ID:???
>>403
だったら普通初期化するかキャストするもんだよ
0407nobodyさん2009/01/17(土) 12:25:11ID:???
>>406
開こうとしているファイルが必ず開けるとは限らないわな。
0408nobodyさん2009/01/17(土) 12:26:13ID:???
>>407
foreach((array)file('〜') as ...)
0409nobodyさん2009/01/17(土) 12:29:37ID:???
phpごときで何細かいことウダウダやってんだかww
0410nobodyさん2009/01/17(土) 12:30:34ID:???
>>406
エラー処理がしやすいとかじゃね?
0411nobodyさん2009/01/17(土) 12:34:40ID:???
あと
$ary = file('test.txt') or array();
$ary = file('test.txt') or exit;
とか。もしくは例外使う。

何か関数からの出力を得る度にifで1ブロック使うなんてナンセンスすぎ。
0412nobodyさん2009/01/17(土) 12:38:43ID:???
399は最近学び始めてphpが分かってきたから答えたくてたまらないお子ちゃまか
04133992009/01/17(土) 12:39:51ID:???
>>411が糞ウザくなってきたから一言。


あのな。
言っておくが、>>399みたいな処理は普通はクラスのメソッド通すなりするわ。
めんどくさいからはしょってるだけだろーが。分かるか?あ??


なんか>>411見てると、俺の会社の全然使えないカスPGにそっくりで殴り倒したくなるわw
0414nobodyさん2009/01/17(土) 12:40:56ID:???
いやお前のコードが使えないんじゃん
0415nobodyさん2009/01/17(土) 12:41:35ID:???
お前ら、質問があっても誰も答えないくせに
誰かが答えるとそれには文句つけないと気がすまないんだな。
どうしようも無いカスだなw
0416nobodyさん2009/01/17(土) 12:42:27ID:???





たかがPHPでしょ






動けばいいじゃん




ばか?
0417nobodyさん2009/01/17(土) 12:43:17ID:???
能力ないのに見栄を張るとは恥ずかしい奴だなw
0418nobodyさん2009/01/17(土) 12:46:56ID:???
さすがPHPスレ。お前ら目糞鼻糞。
0419nobodyさん2009/01/17(土) 12:50:26ID:???
          ____        ) 『 実行すれば分かる 』っと、
        /⌒  ⌒\      ) 『 開こうとしているファイルが必ず開けるとは限らないわな』っと。
      /( ●)  (●) \    )/⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y丶
     / ::::::⌒(__人__)⌒::::: \
    |      |r┬-|     |
     \       `ー'´     /
     ノ            \
   /´               ヽ                 カ
  |    l   l||l 从人 l||l      l||l 从人 l||l   カ    タ
  ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ
   ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
      ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
   ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄


       ____                 
    /::::::─三三─\            foreach((array)file('〜') as ...)
  /:::::::: ( ○)三(○)\          
  |::::::::::::::::::::(__人__)::::  |  _____
   \:::::::::   |r┬-|  ,/ .| |        
   ノ::::::::   `ー'´  \ |
0420nobodyさん2009/01/17(土) 12:52:06ID:???
やぱりphpしか使えない奴ってバカっ事でOK?

Java使いが一番
0421nobodyさん2009/01/17(土) 12:52:28ID:???
>>419
ウケルwwwww
0422nobodyさん2009/01/17(土) 12:53:47ID:???
アホな奴もいるもんだなw
0423nobodyさん2009/01/17(土) 13:03:06ID:???
自演煽りのクオリティが低すぎて吹いた
0424nobodyさん2009/01/17(土) 13:46:03ID:???
書き込み時間と日頃のレスの伸びからして2名が暴れていただけらしいな
PHPやってると頭だけではなく性格まで悪くなるらしいから気をつけようww

融通利かないやつやコミュニケーション能力無いやつは
PGだろうが何だろうが使えん
うちにも1名いて給料の査定も下がったはずだが、はやくその理由に気付いて辞めてくれ
0425nobodyさん2009/01/17(土) 17:45:47ID:???
一週間を表示する関数を作ってみたんですが、
どういうわけか土曜日だけ文字化けしてしまいます。
解決策はないでしょうか?

<?php
write_day();

//一週間を表示する関数
function write_day(){
while($i<7){
print($f1[$i]);
$ts=getDay($i);
print(date("m/d".getYoubi(date("w",$ts)),$ts));
$i++;
}
}

//曜日を漢字に変換
function getYoubi($wday) {
$arr = array("(日)","(月)","(火)","(水)","(木)","(金)","土");
return $arr[$wday];
}

//日にちを取得する関数
function getDay($day){
$now = time();
return mktime(date("H",$now),date("i",$now),date("s",$now),date("m",$now),date("d",$now)+$day,date("Y",$now));
}
?>
0426nobodyさん2009/01/17(土) 18:23:30ID:???
>425
コードをShift_JISで書かないでUTF-8にするだけで解決。
0427nobodyさん2009/01/17(土) 18:52:25ID:???
>>426
一発で解決しました。ありがとうございます。
本当文字コードって難しい。
スクレイピングでサイト作る人とか超尊敬。
0428nobodyさん2009/01/17(土) 23:41:37ID:???
>>425
まったく関係ないんだけど
土曜日だけ()が付かないのはなんでなんだろうと思った。
0429nobodyさん2009/01/18(日) 07:29:09ID:???
>>428
土曜日だけどうしても文字化けで表示できず
いろいろと試行錯誤した結果わからなかったので
質問しました。

()除いたりといった試行錯誤の名残をそのまま
書いてしまいました。ごめんなさい。
0430nobodyさん2009/01/18(日) 11:24:28ID:???
>>424
自己紹介乙
0431nobodyさん2009/01/18(日) 20:28:36ID:???
プログラム経験無しで、今からPHPを勉強しようと思っています。
そんな俺に、一冊買うならコレ!っていうPHPの参考書を教えてください。

0432nobodyさん2009/01/18(日) 20:32:39ID:???
>>431
http://www.php.net/manual/ja/
0433nobodyさん2009/01/18(日) 21:03:22ID:???
>>432
本をonegaisimasu
0434nobodyさん2009/01/18(日) 22:30:36ID:???
まずマニュアル嫁
0435nobodyさん2009/01/18(日) 23:59:27ID:542zz2rd
アンケートプログラムなんかでよくある、全部の項目が入力されているかを
submitボタンが押されたときに調べて、それが通ればsessionに入力項目を追加して次のページへ
ってことをやりたいんですが、
全部の項目が入力されているかを調べるのはonclickにJavascriptでチェック出来ますが、
そのあと動的に選んだ値をphpのsession変数に追加するのってどうしたら良いのでしょうか?
0436nobodyさん2009/01/19(月) 00:03:08ID:???
$_SESSION['hoge'] = $hoge;
0437nobodyさん2009/01/19(月) 00:11:48ID:jnDZLn2z
>>436
すいません、えっとどう言ったら良いのか;
質問のニュアンスを伝えるためにわざと無茶苦茶に書くと、

<input type="submit" onclicke="check()" />
<script type="text/javascript">
function check(){
//checkコード
if(allchecked){
$SESSION['age']=document.getElementsById("age");
}
}
</script>

こんな風な意味合いのことをする方法を聞きたかったのです。
0438nobodyさん2009/01/19(月) 00:16:55ID:???
PHPとJavascriptの違い分かってないの?
0439nobodyさん2009/01/19(月) 00:21:05ID:jnDZLn2z
>>438
あくまでニュアンスを伝えるために上記のような書き方をしているだけで、
サーバサイドphpとユーザサイドJavascriptの違いは分かってます。
ただphpではこういうチェックが出来ないのでどうしたものかと迷ったので。
0440nobodyさん2009/01/19(月) 00:21:42ID:???
よく分からんがGETで取れば?
0441nobodyさん2009/01/19(月) 00:22:12ID:???
いやPOSTでもいいけど
0442nobodyさん2009/01/19(月) 04:21:49ID:???
>>437
よく意味がわからんが・・・

<form name="form1" method="post" action="hoge.php">
<input type="submit" onclick="return check();" />
名前:<input type="text" name="name" />
</form>
<script type="text/javascript">
function check(){

  //checkコード
  if (document.form1.name=='') {
    alert('名前が入力されていません');
    return(false);
  }

  return(true);

}
</script>


あとはhoge.phpでnameを受けとってセッション変数に放り込むなり好きにするヨロシ。
0443nobodyさん2009/01/19(月) 04:44:39ID:???
ただのjavascriptの話になってるw
0444nobodyさん2009/01/19(月) 17:58:38ID:???
うわわわわ。。。
issetでもisSetでも書けるくさいなぁ(´・ω・`)
0445nobodyさん2009/01/19(月) 20:15:28ID:???
str_replaceよりpreg_replaceが速いのか
0446nobodyさん2009/01/20(火) 00:26:44ID:???
>>445
それはありえない
preg_replaceは正規表現の処理が入る分遅くなる
ついでにいうと、単純な置換ならstrstrよりstr_replaceの方が速い
04474452009/01/20(火) 00:28:42ID:???
>>446
じゃあここのはウソってことか。。。

ttp://phpspot.org/blog/archives/2006/11/12php.html
0448nobodyさん2009/01/20(火) 00:37:17ID:???
うん
0449nobodyさん2009/01/20(火) 00:58:56ID:???
>>447
そのサイトは検証もせずコピペしてるだけだからあまり鵜呑みにしない方がいい
0450nobodyさん2009/01/20(火) 01:55:00ID:???
原文はこう書いてある。
str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4

PHPの勉強の前に、まず英語勉強しようぜ
0451nobodyさん2009/01/20(火) 06:28:50ID:???
>>450
その原文の出典ってどこ?
0452nobodyさん2009/01/20(火) 07:38:55ID:???
>>447のリンク先
0453nobodyさん2009/01/20(火) 12:58:32ID:???
>>447
記事がうそじゃないとしても、2年も前だとあまり当てにならないな。
5.1.x時代だっけ
0454nobodyさん2009/01/20(火) 14:17:46ID:auDP4Xko
sql文の中に多数の変数を入れるにはどうしたらよいのでしょうか?
0455nobodyさん2009/01/20(火) 14:24:08ID:???
普通に文字列連結じゃだめなの?
意図がいまいちわからない。

あ、エスケープはしっかりしろよな。
04564542009/01/20(火) 20:16:30ID:???
>>455
はい普通に . でした
6時間前の自分にゲンコツしときました
0457nobodyさん2009/01/20(火) 23:14:20ID:FkFXLWeK
http://php5.seesaa.net/category/3813207-1.html

ここを見ながら勉強中で、ひとつ前の
Step9・入力された値をPHPでチェックする
まではうまくいったんですが、
Step10・入力された値をJavaScriptでチェックする
が、うまくいきません。イントラネットとかいうのが関係してるんでしょうか。。
何度も確認したんですけど、警告ウインドウが出てきません
0458nobodyさん2009/01/20(火) 23:21:44ID:???
問題の切り分けすべし
0459nobodyさん2009/01/21(水) 03:11:36ID:???
まずなにも入れないで計算してみて。
あとjavascript有効になっている?
0460nobodyさん2009/01/21(水) 09:46:52ID:VkT7uFdT
>>459さん
javascriptは、セキュリティのところでいじればいいんですよね。
それでしたら有効になってます。
なにも入れないで計算すると
-------------------
+=0

前の画面へ戻る
-------------------
って出ます。IEから見るソースは
-------------------

<html>
<head>
<title>calc.php</title>
</head>
<body>
+=0
<br/>
<br/>
<a href="#"onclick="history.back();return false;">前の画面へ戻る</a>

</body>
</html>
------------------------------
です。
書いてるソースのほうは
http://php5.seesaa.net/category/3813207-1.html
にあるとおりだと思います。
0461nobodyさん2009/01/21(水) 10:44:16ID:???
calc.htmlはどうなっているの?
最初に実行するプログラムはなに?
calc.htmlだよね?
そこからcalc.phpで処理してってことだけど、
form action とか大丈夫これどうり記述しているよね?
jsも読み込んでいるよね。
パスもあっているよね?

0462nobodyさん2009/01/21(水) 13:51:32ID:ruw5pBd2
<input type="text" name="名前" size="20" />
<?
$line = "==名前==";
$line = ereg_replace("==(.*)==", $_REQUEST["\\1"], $line);
?>
上記スクリプトで $line を name="名前" のフォーム値に置換したい
のですができません。どうすれば置換できるでしょうか?
0463nobodyさん2009/01/21(水) 14:09:33ID:???
マニュアル見れ
あとeregよりpreg
0464nobodyさん2009/01/21(水) 14:58:58ID:VkT7uFdT
>>461さん
calc.htmlのソースは

---------------------------
<html>
<head>
<script type="text/javascript"src="calc.js"></script>
<title>calc.html</title>
</head>
<body>
<form name="form1"action="calc.php"method="post">
<input type="text"name="txtA"id="txtA">

<select name="selOpe"size=1>
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>

<input type="text"name="txtB"id="txtB">=?
<br>
<input type="submit"value="計算">
<input type="reset"value="クリア">
</form>
</body>
</html>
-------------------------------------
です。パスがあっているかどうかは、どこを見るとわかりますか?
0465nobodyさん2009/01/21(水) 15:12:50ID:???
>>464のソースの中を見ればわかりますよ!( ^∀^)b
0466nobodyさん2009/01/21(水) 15:27:54ID:???
sample012
の中にはなにが入っている?
sample011までPHPは動いていたんだよね?
わからん。
ほんと。http://php5.seesaa.net/category/3813207-1.html
と同じことしているんでしょう?
calc.jsもsample012のフォルダの中にはいっているんでしょう?
ソースはコピペしてやっているんでしょう?

0467nobodyさん2009/01/21(水) 16:23:54ID:VkT7uFdT
>>465さん
>>466さん
コピペしなおしたらできるようになりました。
でもどこが悪かったのかわからに・・
0468nobodyさん2009/01/21(水) 19:35:45ID:???
考えられるのは、どっかに空白がはいってしまったこと。
なんか変な文字がどこかにはいってしまったか。
おれもコピペでそういうことになったことは
よくある。
見たとこミスはないので、あのソースをきちんと理解
して次進んでいいと思うよ
0469nobodyさん2009/01/21(水) 21:43:57ID:VkT7uFdT
空白もいけないんですか
先生ありがとう
0470nobodyさん2009/01/21(水) 22:33:22ID:???
いやあくまでも想像だけど、でも間違っているところがないから。
以後もし動かったら再度コピペすることを望みます。
04714622009/01/22(木) 10:25:52ID:PnoeEoeZ
>>463
すみません、マニュアル見直しました。
ところで、

$line = "==名前==";
//$line = preg_replace("/==(.*)==/e", "$_REQUEST['$1']", $line);
$line = preg_replace("/==(.*)==/e", "rep('$1')", $line);
function rep ($text) { return $_REQUEST["$text"]; }

コメント行の置換が動作せずに下記エラーが発生するのですが、
いちいちrepのようなfunctionを用意しなきゃいけないのでしょうか?

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING'
in /************/index.php on line 340
0472nobodyさん2009/01/22(木) 10:36:31ID:???
preg_replace_callback じゃないのか
0473nobodyさん2009/01/22(木) 12:54:40ID:???
$line = "==名前==";
$line= preg_replace("/==(\S*)==/e", 'sprintf("<input type=\"text\" name=\"$1\" value=\"%s\" />", isset($_REQUEST["$1"]) ? $_REQUEST["$1"] : "")', $line);

こうやりたいのか?

キー文字は==全角==じゃなくて==半角==がいいと思うが
04744732009/01/22(木) 13:16:38ID:???
htmlspecialcharsも使わないとやヴぁいか。。。
04754622009/01/22(木) 13:23:02ID:PnoeEoeZ
>>473
すいません、解決しました。バカみたい・・・
$line = preg_replace("/==(.*)==/e", 'sprintf("%s", $_REQUEST["$1"])', $line);
0476nobodyさん2009/01/23(金) 05:27:52ID:L5uKYwrL
今初めてのPHP+mysqlを勉強しているのだが、
17章のサンプルアプリケーションが動かない。
これって仕様かな?
おれはcent os5でやったんだが、画面真白で。
linuxで誰かやってくれませんか?すいませんが
お願いします。ソースは一応レンタルサーバーと
ホームページ上に貼り付けているんで、
ソースダウンロードできないんだ。
http://gichioka.web.fc2.com/source.zip←ソースをダウンロード
http://www.krautgrrl.com/learningphp/index.php/site/C17/←データベース
とかもろもろ貼ってあります。
お手数ですが、よろしくお願いします

0477nobodyさん2009/01/23(金) 05:29:33ID:L5uKYwrL
日本語へたで申し訳ないですが、まあ両方見てやってみてください。
ほんとはphpの本のスレに行きたかったんだけどなくなってしまった
みたいで。
すいませんが、よろしくお願いします
0478nobodyさん2009/01/23(金) 05:34:48ID:L5uKYwrL
すいません。
サンプルコードありました。
昔はなかったのに
http://www.oreilly.co.jp/books/9784873113654/
ここです。
0479nobodyさん2009/01/23(金) 07:37:08ID:???
オライリー本、
読んで理解できたためしがない
0480nobodyさん2009/01/23(金) 08:08:21ID:???
>>478
エラーメッセージは?
0481nobodyさん2009/01/23(金) 16:01:37ID:???
<?php
session_start();
$anc = array('anc1' => 'one', 'anc2' => 'two', 'anc3' => 'three'); $html = '<html><body><form action="">';
switch ($_REQUEST['m']) {
case '1':
$html .= 'confirm<br />';
foreach ($anc as $k => $v) { $_SESSION[$k] = $_REQUEST[$k]; if ($_REQUEST[$k]) { $html .= $v . '=checked! '; } }
$html .= '<br /><input type="hidden" name="m" value="2"><input type="submit" value="go!">';
break;
case '2':
0482nobodyさん2009/01/23(金) 16:04:18ID:???
$html .= 'finish<br />'; $param = ''; foreach ($anc as $k => $v) { $_SESSION[$k] = $_REQUEST[$k]; if ($_REQUEST[$k]) { $param .= $v . '=checked! '; } }
if ($fp =@ fopen('anc.dat', 'a')) { fputs($fp, date("Y/m/d H:i:s ") . ' ' . $param . ' ' . $_SERVER["REMOTE_ADDR"] . "\n"); fclose($fp); } $html .= 'thank you!';
break;
default:
$html .= 'question<br />'; foreach ($anc as $k => $v) { $html .= '<input type="checkbox" name="' . $k . '" value="1">' . $v . ' '; }
0483nobodyさん2009/01/23(金) 16:08:55ID:???
$html .= '<br /><input type="hidden" name="m" value="1"><input type="submit" value="next">';
}
$html .= '</form></body></html>'; echo $html; exit;
?>

パソコンが今使えないので携帯で消化してしまってごめんなさい
このプログラムのoneやtwoを別のファイルに記録したいんですが
どうすればよいでしょうか?
すごい初心者なので、良ければ具体的に教えていただければ嬉しいです
スレチや失礼あればごめんなさい
0484nobodyさん2009/01/23(金) 16:11:58ID:Jr51+scJ
あと、これを一時間くらいでやらなきゃなので
テンパってます…
お待ちしてます
0485nobodyさん2009/01/23(金) 16:34:47ID:???
初心者とかじゃなくて、
「oneやtwoを別のファイルに記録したいんですが 」
日本語か?それ。
0486nobodyさん2009/01/23(金) 16:40:52ID:Jr51+scJ
すいません
やはり分かりにくかったですか


questionの解答がoneやtwoになっていて
その解答を記録したいんです
解答した日付時刻などはanc.datに記録されますが
なにを答えたかが記録出来てないと思うのですが
0487nobodyさん2009/01/23(金) 16:58:18ID:???
>>486
なんかエラー出てると思うけどねぇ。
エラーを確認するのが解決への近道だよ。

たぶん、原因は↓かと。
$param .= $v . '=checked! ';

$param .= "{$v}=checked! ";
に変えてみたらどうかな?
0488nobodyさん2009/01/23(金) 17:08:51ID:Jr51+scJ
>>487
あれ
paramじゃなくてそこはhtmlにではないですかね
僕の方では一応エラーは出てません
0489nobodyさん2009/01/23(金) 17:21:03ID:???
>>486
セッションが引き回せていないだけ、ってオチじゃないの?
case '2'のところで、print_r($_SESSION)ってやってみれば?
0490nobodyさん2009/01/23(金) 17:27:13ID:Jr51+scJ
>>489
すいません
どの辺りに入れたらいいかよろしければおねがいします
セッション引き回す?の意味がよく分からないのですが
…念のためお聞きしますが、このプログラムでは解答をファイルに書き込めないですよね?
0491nobodyさん2009/01/23(金) 17:37:42ID:???
>>486
もう少し頭を整理したら?
回答はどのファイルに書き込むの?
> oneやtwoを別のファイルに記録したいんですが
回答毎に別のファイルを作るってことかい?
0492nobodyさん2009/01/23(金) 17:39:39ID:???
//$_SESSION[$k] = $_REQUEST[$k];
//if ($_REQUEST[$k]) {
if ($_SESSION[$k]) {
0493nobodyさん2009/01/23(金) 17:52:40ID:???
>>490
デバッグなんだから、どこでもいいよ。
とりあえず、聞く前に試したら?

セッションに代入した(はずの)後、
代入された(はずの)セッションを使う前
0494nobodyさん2009/01/23(金) 17:58:15ID:Jr51+scJ
>>491
これをwebアンケートのようにしたときに
これを解答した人が何を選んだのか記録するファイルを作りたいんです
今はanc.datをつくればそこに日付等が記録されますが
できれば加えてone,two,threeのどれにチェックをつけたかも記録したいということです
記録するのがanc.datファイルでなくてもよいです

>>492
ありがとうございます!
それで上記みたいな事ができるでしょうか?
今は分かりませんが、夜に試してみます
0495nobodyさん2009/01/23(金) 18:00:35ID:Jr51+scJ
>>493
自分でさっきいろいろ挿入してみました
どうしてもエラーが出てしまったので
あとで>>492を試してみます
ありがとうございます!
0496476です。2009/01/23(金) 19:42:52ID:L5uKYwrL
エラーメッセージは
Warning: Unknown: Failed opening '/var/www/html/login.php' for inclusion (include_path='.:/usr/local/include/php/libs') in Unknown on line 0
でした。
わかる人いますか?
ぜんぜんわかりません。
ちなみにsmartyはhttp://hangar5.blog48.fc2.com/blog-entry-27.html
でインストールしました。

0497nobodyさん2009/01/23(金) 20:01:20ID:???
すんまそん、どなたか教えて下さい

あるphpで書かれたスケジューラを使っているのですが、ユーザ認証の際に
POSTで パスワードを受け取り($pwd)、これの一部をsaltとして使い、crypt()でパスワードを暗号化しています。
おおまかな処理は以下の様な感じで行っています(htmlspacialchars等は省きました)。

/* $userid, $pwd => POSTから受け取ったユーザ名・パスワード */
$ pwd_cr = crypt( $pwd, substr( $pwd, 3, 2 ) );

/* SQL文作成 */
$sql = "SELECT id, passwd FROM users ";
$sql .= "WHERE id='".$userid."' AND password='".$pwd_cr."'";

/* SQLの結果セット取得 */
$res = pg_query($conn, $sql);
$cnt = pg_num_rows($res);


教えてもらいたい事ですが、この crypt( string $str [, string $salt ] ) について、
$str と $salt が完全に同じものである場合、どのような環境でも、生成される文字列は常に同一のものになるのでしょうか?

なんでまたこんな事を聞くかと言うと
Windows ServerにApacheとPHPをぶちこんで動かしていたら、Apache再起動のタイミングで
何故か 同一の $str ・ $salt から生成される文字列が変わってしまった経験が今日を含めて2回起きたからです。
そりゃ確かに php.netのマニュアルには

> そのシステム上で使用できるその他のアルゴリズムを使用します

と書いてあるんですが…ンなcryptの動作がコロコロ変わるものなんでしょうか?
0498nobodyさん2009/01/23(金) 20:04:21ID:???
連投すみません、追記。

crypt の挙動が変わる辺りで Windows Update を挟んでいたかどうかは、情けない事にわかりません。
むしろ、 Windows Update で crypt の挙動が変わる可能性があるなら、どのHotfixが怪しいか教えてもらえるとありがたいです。
0499nobodyさん2009/01/23(金) 20:10:33ID:???
>>496 (>>476)
「 /var/www/html/login.php 」について、下の2つの確認まじおすすめ
・確実に存在しているのか
・Apacheを実行しているユーザが読めるのか(パーミッションを確認)
0500476です。2009/01/23(金) 20:41:49ID:L5uKYwrL
>>499さんへ
/var/www/html/login.php
確実にあります。
パーミッションもユーザーが読めるようにしています。
smartyもできてます。
if (class_exists('Smarty')) {
$smary =& new Smarty;
printf("you can use Smarty(version %s).\n", $smary->_version);
} else {
echo "you can't use Smarty.\nplease install Smarty library.";
}
で確認をとりましたし、テストデータもいれました。
ってことはlinuxだからだめってことですよね?
ほかに考えられないんですよ。
基礎からのphpのサンプルアプリケーションもlinuxでだめでした。


0501nobodyさん2009/01/24(土) 21:09:15ID:???
>>476
・ DB関連の記述は間違っていないか
  MySQLみたいだけど、特に $db_host 等
・ php自体の記述が間違ってないか
  つーかphpの文法はわかってる?あとファイル始端終端の無用な空白行やコメント、文字コードとかにも注意。
・ 最初に $test = 0; を、随所に echo "TEST".$test.": OK";$test++; を入れて止まってるところを探せ
  php勉強するなら結局はコレ大事。

あとは、本気でどうにも出来ないけどどうにかしたい、って言うなら↑の3つを試した後で
今使ってるMySQLの中身と、今のDocumentRootのディレクトリ構成、php.ini、httpd.conf を、ディレクトリ構成ごとまとめて
zipでうpする位は必要だな。レスが付くかどうかは知らんけど。

>>476 の source.zip だけじゃ db_login.php とか、Auth/HTTP.php とか入ってないっしょ。
ドキュメント見たらなんか、学習に沿って自分で作って配置するものらしいけど…そんなんわからんがな。
これじゃ相当なヒマ人かエスパーじゃない限りレスも何もでけん。
0502476です。2009/01/24(土) 22:31:06ID:M+3olz+y
>>501
Auth/HTTP.php これはpearだぜ。
db_login.php はつくったけど、結果はだめでした。
もういいです。すいませんでした。
Warning: Unknown: Failed opening '/var/www/html/login.php' for inclusion (include_path='.:/usr/local/include/php/libs') in Unknown on line 0
これも連日ぐぐっているけど、だめ。
orellyに聞いたところ確認するって。
誰か持っていてアプリをlinuxで試した人いるかなって
思ったんだけど、いないみたいですね。
スレ汚しすいません。
持っている方はぜひやってみて。
報告待っています
souce.zipは削除しますので、
暇なエスパーの方でおれやってみようかな?っていう方
http://www.oreilly.co.jp/books/9784873113654/
からダウンロードしてみてください。
ではすいませんでした。
■ このスレッドは過去ログ倉庫に格納されています