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

【PHP】下らねぇ質問はここに書き込みやがれ 55

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/09/29(土) 18:35:56ID:YlkpEUW6
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 54
http://pc11.2ch.net/test/read.cgi/php/1189309377/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで


0002nobodyさん2007/09/29(土) 18:37:31ID:YlkpEUW6
■過去ログ
【PHP】下らねぇ質問はここに書き込みやがれ 53
http://pc11.2ch.net/test/read.cgi/php/1188047468/
【PHP】下らねぇ質問はここに書き込みやがれ 52
http://pc11.2ch.net/test/read.cgi/php/1186794483/
【PHP】下らねぇ質問はここに書き込みやがれ 51
http://pc11.2ch.net/test/read.cgi/php/1185521566/
【PHP】下らねぇ質問はここに書き込みやがれ 50
http://pc11.2ch.net/test/read.cgi/php/1184143801/
【PHP】下らねぇ質問はここに書き込みやがれ 49
http://pc11.2ch.net/test/read.cgi/php/1182794620/
【PHP】下らねぇ質問はここに書き込みやがれ 45 (※実質48)
http://pc11.2ch.net/test/read.cgi/php/1180181033/
【PHP】下らねぇ質問はここに書き込みやがれ 47
http://pc11.2ch.net/test/read.cgi/php/1180181033/
【PHP】下らねぇ質問はここに書き込みやがれ 46
http://pc11.2ch.net/test/read.cgi/php/1178955837/
【PHP】下らねぇ質問はここに書き込みやがれ 45
http://pc11.2ch.net/test/read.cgi/php/1178955768/
【PHP】下らねぇ質問はここに書き込みやがれ 45
http://pc11.2ch.net/test/read.cgi/php/1177635762/
【PHP】下らねぇ質問はここに書き込みやがれ 44
http://pc11.2ch.net/test/read.cgi/php/1176364487/
【PHP】下らねぇ質問はここに書き込みやがれ 43
http://pc11.2ch.net/test/read.cgi/php/1175368910/
【PHP】下らねぇ質問はここに書き込みやがれ 42
http://pc11.2ch.net/test/read.cgi/php/1174217841/
【PHP】下らねぇ質問はここに書き込みやがれ 41
http://pc11.2ch.net/test/read.cgi/php/1173163186/
0003nobodyさん2007/09/29(土) 18:38:21ID:YlkpEUW6
関連リンク
■本家マニュアル   http://www.php.net/manual/ja/
■日本PHPユーザ会 http://www.php.gr.jp/
■PEARマニュアル  http://pear.php.net/manual/ja/
■メーリングリスト   http://ns1.php.gr.jp/mailman/listinfo/
■ZFマニュアル    http://framework.zend.com/manual/ja/

(以下英語)
■Smarty       http://smarty.php.net/
■Zend本家      http://www.zend.com/
■Zend Framework  http://framework.zend.com/
■php | architect   http://www.phparch.com/
■Smartyマニュアル http://smarty.php.net/manual/en/
■PECL本家(英語) http://pecl.php.net/
0004nobodyさん2007/09/29(土) 18:38:55ID:YlkpEUW6
【簡易FAQ】
1.文字コードは何を使えばいいの?
 →1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
 → http://example.com/が例文などのために予約されている。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
 → Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
 → 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
  「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
 → {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
 → cronかタスクスケジューラを使え。
7.extractって危険なの?
 →変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
 → URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
 → .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
0005nobodyさん2007/09/29(土) 18:39:41ID:YlkpEUW6
10. そもそもインストールの時点でうまくいかない
 → 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
  Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
 → データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
 → ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
 → 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
 → よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
  http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40
15. クッキーの情報をユーザから隠したい
 → セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
 → strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
 → まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
 → C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
  参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(http://〜とか)を扱う際の限界
 → fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
  必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
 →19.を参照
21. 画像処理一般 or GDの限界
 → ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
 → 好きにしてください
0006nobodyさん2007/09/29(土) 18:51:13ID:???
 \/: /: : : /: /: : : : : : /: /: : |: : : : l: : : ヽ}   \
  /: /: : : /: / : : : : :://://: :∧ : : : :|: : : : |     〉
 l: |: : :  |: /: : : : :/ /" /: :/  \: : :.|: : : : |   /
 |: :ハ: : : |: |二ニ==ェニフ´   /, へ、____>':「: |: : : レ'
 ヽ:|∧: : |: |く/フこ^ヽ\ /   / _ェ‐‐、=、`|: : |: : l: :|
  ∧ヘ: : |/ |r^{:::}゚ |  "      |^{;:::}r^} 〉 |: :/: : l: :|
  /: : |\: |ヽ >ー‐'        ヾ_こ_ソ  /:/: : :/ /|
 / : : {. \ヽ :::::::     ヽ     `ー―' /イ: :/ /: |
./: : : ∧  ト >   , へ、___   :::::/ /: ///: l: |
 : : : i^ヽ *\    / /´    :::::ヽ    // ノ/: : l: |  下らねぇ質問はここに書き込みやがれ
 : : /レ⌒ヽ、.  ヽ、 ヽ、_     :::ノ  , イァー‐く`¬ : l::|  って言ってるですぅ。
 : / / / ,へ. l| ` 、    ̄ ̄ ̄, ' rーく \.  |` ト、:.l::l
 ::/ .| '  / /ヽ|    >= ァ  ̄  /^ヽ  ` ヽ. | 〈 ヽ::|
: /  |       / |  /⌒/L「\.   |       ./ /  | |
0007nobodyさん2007/09/29(土) 22:12:08ID:m/9bviMM
お手数ですがみなさんの力を貸してください。
dat.txtにaというテキストが入っていたとしてこれを取得してaと同じならば
等しい、それ以外ならば等しくないと表示させたいのですがうまく行きません。
何か良い方法はありますか?

$fp=@fopen("dat.txt","r") or die("ファイル読み込みオープンエラー");
while(!feof($fp)){
$line=fgets($fp);

print $line."<br>";

if("a"==$line){
$error="等しいです";
}else{
$error="等しくありません";
}
}
fclose($fp);
0008nobodyさん2007/09/29(土) 22:35:37ID:???
>>7
改行コードじゃないかな
0009nobodyさん2007/09/29(土) 22:39:46ID:m/9bviMM
>>8
アドバイスありがとうございます。
早々アドバイス通り比較の部分にも改行コードなどを付加する等の処理を施しましたが、上手くいきませんでした。
ウインドウズ環境なので改行コードは\r\nにしました

if("a"."\r\n"==$line){
$error="等しいです";
}else{
$error="等しくありません";
}
0010nobodyさん2007/09/29(土) 22:41:00ID:???
trim($line)
0011nobodyさん2007/09/29(土) 22:41:37ID:???
>>7
<?php echo '等し'.(@file_get_contents('dat.txt')=='a'?'いです':'くありません');
0012nobodyさん2007/09/29(土) 22:44:39ID:???
>>7
echo $error
0013nobodyさん2007/09/29(土) 22:50:34ID:???
>>7
echo bin2hex($line);
を見てみ。

ファイルを読み込むのは、file_get_contents() でもできるよ。
文字列比較は、strcmp() を使う方がいいかな。
0014nobodyさん2007/09/29(土) 22:55:14ID:vw2Lts3b
>>7
$errorの中身を表示するコードが書かれていないからです。
0015nobodyさん2007/09/29(土) 22:56:39ID:vw2Lts3b
おっと、 >>12が先に言っていた。
0016nobodyさん2007/09/29(土) 22:57:44ID:m/9bviMM
もうしわけありません。
print $error;が抜けておりました。しかし、これを付け加えても
等しくありませんとなってしまいます。
file_get_contents()で検索してみたのですが、これはファイル内容を
全て読み込む関数でよろしいですか?
その場合、テキストに改行して書いてあった場合その通りに表示するには
またこれ用の関数があるのでしょうか。。。
0017nobodyさん2007/09/29(土) 23:00:29ID:vw2Lts3b
>>13
> 文字列比較は、strcmp() を使う方がいいかな。

なぜですか。
0018nobodyさん2007/09/29(土) 23:01:13ID:YnYts4Cn
一気にやろうとするなよ
・まずファイルの中身を読み取って出力させる
・次に1行ずつ文字列と比較して真偽を見る
とか順序だててやらないとウンコ漏らすことになる
0019nobodyさん2007/09/29(土) 23:03:03ID:m/9bviMM
やはり8さんがおっしゃっていた改行コードの問題なのでしょうか。
dat.txtにa一文字だけ書いて比較すると正常に等しいとなるのですが、
a
b
c
d
e
としてdat.txtに書き込んだ場合、aがあるにも関わらず等しくないとなるのです。
0020nobodyさん2007/09/29(土) 23:05:14ID:???
\r\nでだめなら\rにしてみな!
0021nobodyさん2007/09/29(土) 23:05:41ID:YnYts4Cn
$logs = file(ファイルへのパス);
foreach ($logs as $log) {
$log = rtrim($log);
if ($log == 'a') {
$print = '等しい';
} else {
$print = '等しいわけない';
}
}
print $print;

でやってみて
0022nobodyさん2007/09/29(土) 23:07:00ID:m/9bviMM
>>20
それも試してみましたが、うまくうごきませんでした。
printでも改行コードまでは表示されないので、どう比較していいか悩んでいます
0023nobodyさん2007/09/29(土) 23:08:02ID:m/9bviMM
>>21
丁寧なアドバイスありがとうございます。
早々試してみます。
0024nobodyさん2007/09/29(土) 23:08:19ID:???
さっき書いたけど。
echo bin2hex($line);
を見たら改行コードが入ってるのが分かるんだけどな。
'0a' とかみたいに16進数で表示されるから。
0025nobodyさん2007/09/29(土) 23:09:26ID:YnYts4Cn
>>23
もちろんログファイルの中身は>>19
0026nobodyさん2007/09/29(土) 23:13:05ID:m/9bviMM
>>24
ありがとうございます。無知ゆえ、改行コードが16進数で表示されるとはわかりませんでした。
そちらも視野に入れて色々じっけんしてみます。
0027nobodyさん2007/09/29(土) 23:16:24ID:m/9bviMM
>>24
改行コードは見えたのですが、行数によってコードが違うので比較できそうにないのですが、
これは比較の方法があるのですか?
0028nobodyさん2007/09/29(土) 23:18:17ID:m/9bviMM
>>21
ためしてみましたが、やはり19と同じ模様です。
一行だけaが記述されていると等しくなるのですが、
a
b
c
とかってして読み込んで比較すると等しくなりませんでした
0029nobodyさん2007/09/29(土) 23:18:25ID:???
一流のハッカーならやって見せるさ。
0030nobodyさん2007/09/29(土) 23:18:43ID:???
>>17
今回の場合だといいかもしれないけど、PHPだと、

if ('2a' == 2)
が真になってしまうから。

=== を使うか strcmp() を使う癖を付けないと危険。
0031nobodyさん2007/09/29(土) 23:19:55ID:???
> if ('2a' == 2)
> が真になってしまうから。

なにこの糞言語www
0032nobodyさん2007/09/29(土) 23:20:11ID:vw2Lts3b
>>21
$printの中身を表示するコードがforeachループに外にあるのは間違いでしょう。
0033nobodyさん2007/09/29(土) 23:24:10ID:???
30の続き。
以下の記事に詳しく書いてある。
ttp://d.hatena.ne.jp/gallu/20061108/p1
0034nobodyさん2007/09/29(土) 23:24:53ID:m/9bviMM
>>32
21のアドバイスでも32のアドバイスもよいと思いますが、私は等しくないと何度も付加したくないので
(foreachの中にプリント入れると全ての処理に対して等しくないをつけてしまう)21のアドバイス
で納得しました
0035nobodyさん2007/09/29(土) 23:28:38ID:m/9bviMM
>>33
へぇーこれは驚きですね。今までならってきたifの概念からすると比較できそう
にないとおもってしまいますが、こういう事実もあるのですね。
0036nobodyさん2007/09/29(土) 23:28:57ID:vw2Lts3b
>>30
そうですね。
1つ気を付けることは、 ===演算子で比較した場合は、 同値の時にTRUEを返すのに対し、
strcmp()関数を使った場合は、 同値の時にFALSEと評価される0を返すということです。

同値かどうかを判断するなら、 ===演算子の方が分かりやすいでしょう。
0037nobodyさん2007/09/29(土) 23:31:02ID:YnYts4Cn
>>32
スタックしてた
脳内で
吊って来る
0038nobodyさん2007/09/29(土) 23:35:00ID:vw2Lts3b
>>34
$printの中身を表示させるコードをforeachループの外に書いてしまうと、
最後の行が "a" と等しいか等しくないかしか分かりませんよ。

>>21の言いたいことは、 trimを使って改行を削除せよということでしょう。
0039nobodyさん2007/09/29(土) 23:35:39ID:m/9bviMM
しかし、あれやこれやと試しているのですが、なかなか上手くいかないですね・・・。
例えばパスワード登録フォームってありますよね。他の人と同じパスワードを登録
しようとすると、現在そのパスワードは使用中ですとかって出ますよね。
そういうようなプログラムを実現したいのですが、素人目の判断ではなく実際の現場では
どのように記述されているのでしょうか
0040nobodyさん2007/09/29(土) 23:37:03ID:m/9bviMM
>>38
どうやら私の解釈がまちがっていたようです。失礼いたしました
0041nobodyさん2007/09/29(土) 23:40:58ID:m/9bviMM
あ、でもまだクラスとかよくわかってない私が現場のスクリプトを聞くなんておごまかしいことでしたね(笑)
0042nobodyさん2007/09/29(土) 23:41:47ID:???
>>39
> 実際の現場では

実際の現場?
パスワードを入力されたらそれをMD5などでハッシュ化しデータベースに保存。
チェック時は入力されたパスワードを再度ハッシュ化しデータベースを検索。
0043nobodyさん2007/09/29(土) 23:43:11ID:m/9bviMM
>>42は業界の方ですか?
やっぱりパスワードとか扱う場合はテキストファイルじゃなくてデータベース使うんですね。
自分はMySQL入れています
0044nobodyさん2007/09/29(土) 23:45:09ID:???
パスワードとか扱う場合だけじゃなくて、
ほとんどの場合データベースを使う。
テキストファイルはログ吐くぐらいにしかつかわない。
0045nobodyさん2007/09/29(土) 23:47:40ID:???
こういう判定の仕方もある

if(strstr($line, "a") === false){
 print "等しくない";
} else {
 print "等しい!";
}

今回は一文字だけど特定の単語が含まれるかどうかの判定もできる
0046nobodyさん2007/09/29(土) 23:49:28ID:m/9bviMM
なるほど。なるほど。
みなさんありがとうございます。今日はもう休みますが、明日また続きを
やりたいとおもいます。
0047nobodyさん2007/09/29(土) 23:55:23ID:???
次の患者さんどぞ〜
0048nobodyさん2007/09/30(日) 00:04:09ID:???
>>27の意味がよく分からなかったけど、聞くのを忘れてしまった。
0049nobodyさん2007/09/30(日) 01:22:21ID:???
>>7
>>19
実はprint $error;をループの外に置いてて
ファイルの最後の行の結果で上書きされてた
ってオチじゃないの
0050nobodyさん2007/09/30(日) 01:35:44ID:vTnMvhRC
スレッド式掲示板をつくりたいと思ってます。ログの分け方なのですが、
1スレッド1ファイルにするのと、1ファイルに全部まとめるのは
どちらがいいでしょうか?

ファイルが大量にあると鯖の動作にも影響でそうな気もしますし、
ログを1つのファイルにまとめると読み込むときに負荷が気になります。
0051nobodyさん2007/09/30(日) 01:55:03ID:???
やってみればいいだろが
0052nobodyさん2007/09/30(日) 02:34:19ID:???
>>50
DBに格納するのがいいと思う
0053nobodyさん2007/09/30(日) 02:56:59ID:???
>>50
一般的な個人のページだと、
スレッド式にしたところで年間に書き込まれる数なんて合計100レスいくかいかないだろ?
だからあんまこだわらなくてもいいんじゃないかね。
とはいえやっぱファイルを分けたほうが管理しやすいだろう。
保守性を考えた組み方をしたほうがいいよ。
まぁDBを使えないとか特殊な環境以外ではDBでやったほうがいいけど。
0054nobodyさん2007/09/30(日) 03:25:14ID:???
>>50
そのスレッドって各スレをageたりsageたりできるの?
1ファイルでやるとスレの順番の入れ替え表示は手間になるよ。
ログファイルを丸ごと配列に読み込める程度の量なら簡単だけど、
かなり分量が増えることを想定してるんでしょ?
あと、レスデータってスレごとにまとめるの?それとも行の頭にスレNo.でもつけて
単純にファイル末尾に付け足して表示のときにスレごとに集めるの?
レスの書き込みはやっぱ末尾にappendでやった方が簡単だし
出力時間が短くなる分、ファイルのクラッシュ率も低くなるけど、
スレのデータがファイル中に分散してると表示に手間食うよ。
0055nobodyさん2007/09/30(日) 15:38:25ID:aR8s0UFr
phpをコマンド実行すると以下のエラーが出てしまいます。

$ ./hoge.php
hello
Abort trap (core dumped)

hoge.phpの中身は以下のとおりです。
#!/usr/local/bin/php
<?php
echo "hello\n";
?>


"Abort trap (core dumped)"が出ないようにするためにはどうすればよいのでしょうか?

OSは、
$ uname -r
5.4-RELEASE-p6
です。

よろしくごきょうじゅ願います。
0056>>552007/09/30(日) 15:53:22ID:aR8s0UFr
すいません、OSの種類かいてませんでした。。。orz

FreeBSD

となります。

0057nobodyさん2007/09/30(日) 16:04:23ID:hOfwjY6s
こんにちは昨日質問させて頂いた7です。
皆さん昨日はありがとうございます。今日も挑戦したいとおもいます。

$logs = file("dat.txt");
foreach ($logs as $log) {
$log = rtrim($log);
print $log;
if ($log == 'd') {
$print = '等しい';
} else {
$print = '等しいわけない';
}
}
print $print;

rtrimが入っているので前後の改行・空白は取り除けているはずなのですが、
比較するとどうも等しくないと出力されてしまう症状は変わりませんでした。
引き続きアドバイスをよろしくお願いいたします。
rtrimでは取り除けない改行文字が存在するということなのでしょうか?
0058nobodyさん2007/09/30(日) 16:10:01ID:???
ごめん、昨日の21だけどprint文をループの中に入れて
0059nobodyさん2007/09/30(日) 16:11:10ID:???
>>57
rtrimって後ろの空白文字だけ削除でしょ。文頭に空白文字入ってるとか。
print "[".$log."]\n";
で$logの中身見れば?
もしくは$logの中身が'd'じゃなかったりw
0060nobodyさん2007/09/30(日) 16:14:30ID:hOfwjY6s
>>21
はい。いまちょっと進展があって理由はわからないのですが、なぜかこうすると正常に判断されます。
if(isset($_POST["md5"])){
$passwd=crypt($_POST["md5"]);
$input=htmlspecialchars($_POST["md5"]);
}else{
$_POST["md5"]="";
$input="";
$passwd="";
}
$error="";
print $input."<br>";
print $passwd."<br><br>";
$dat=$input."\r\n";
$file_handle = fopen("dat.txt", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line."<br>";
if($line==$input){
$error="error";
}
}
fclose($file_handle);
if(!$error){
$file=@fopen("dat.txt","a") or die ("ファイル書き込みオープンエラー");
flock($file,LOCK_EX);
fwrite($file,$dat);
flock($file,LOCK_UN);
fclose($file);
}else{
print "使用中のパスワードです";
}
0061nobodyさん2007/09/30(日) 16:15:48ID:hOfwjY6s
>>59
失礼しました。両方の空白はtrimでした。
0062nobodyさん2007/09/30(日) 16:18:08ID:hOfwjY6s
どこでどう等しいと判断されたのか謎ですが、textフォームからとってきたものを
dat.txtとひかくして等しくなければ書き込み処理を行うとすると正常に動作します。
0063nobodyさん2007/09/30(日) 16:56:33ID:hOfwjY6s
みなさんありがとうございます。悩んだ挙句何とか解決しました。いまいち釈然としませんが・・・。
私の書いたものは動き的には21と大差ないとおもうのですが、なぜ21の文法で動かないのか理解出来ませんでしたが。こうしたら等しいと出ました。
dat.txtに改行して
a
b
c
d
e
f
g
と入れます。そしてcを比較すると等しいですと出ました。

$dat="";
$fp = fopen("dat.txt", "r");
while($str = fgets($fp)) {
// 文字列比較
$str = trim($str);
if ( $str == "c" ) {
$dat="等しいです<br>";
}
}
fclose($fp);
print $dat;

0064nobodyさん2007/09/30(日) 17:00:01ID:hOfwjY6s
因みに参照したHPはここです。
http://ml.php.gr.jp/pipermail/php-users/2004-April/021654.html
fileで一行ずつ取得しようが、fgetsで取得しようが動きは同じだと考えていたのですが
取得したときになにかあったのでしょう。(それが何かはわかりませんでしたが)
0065nobodyさん2007/09/30(日) 17:35:07ID:Uem6Q7XY
phpでJavaのEL式みたいに書くのって${〜}だけじゃいけませんでしたっけ?
例で言うなら
<?php define("NAME","test") ?>
<html>
<body>
${NAME}
</body>
</html>
みたいな感じで。
0066nobodyさん2007/09/30(日) 17:35:09ID:???
>>63
>>21の、rtrimをtrimに、上書き防止用にelse文以下を削除、してもダメだった?

$msg="";
$logs = file(ファイルへのパス);
foreach ($logs as $log) {
$log = trim($log);
if ($log == 'a') {
$msg = '等しい';
}
}
print "[".$msg."]<br>\n";

>>18氏の書いてるように段階的にとにかく出力させて確認した方がいい気がする
0067nobodyさん2007/09/30(日) 17:40:48ID:???
trim使うと前後のスペースが強制的に取り除かれる。
つまりスペースを使ったパスワードに問題になる
0068nobodyさん2007/09/30(日) 17:45:27ID:hOfwjY6s
>>66
はい。66の通り試してみたのですがうまく動作しませんでした。
とりあえず、動いたので今度は暗号化したものをテキストファイルに書き込んで
パスワードの妥当性チェックに挑戦したいと思います。
0069nobodyさん2007/09/30(日) 17:52:46ID:???
>>67
前後に空白入りのパスワード使わせるの?
それだと空白行チェックも必要にならないかい?
0070nobodyさん2007/09/30(日) 17:53:27ID:hOfwjY6s
素人目の判断なのでこういう記述が正しいのかわかりませんが、とりあえず形になったので書きます。
これでパスワードをmd5ハッシュで暗号化してテキストファイルにかきこみ、これを比較することで使用中のパスワードか比較することができました。*まだサニタイズ等してないので当然このままのスクリプトでアップすることはできませんが。。。
//pass.phpから比較対象のパスワードを取得
//もしこのファイルが直接読み出された場合に$_POST["md5"]はなにもはいってないので初期化
if(isset($_POST["md5"])){
$pass=$_POST["md5"];
}else{
$_POST["md5"]="";
$pass="";
}
//変数の初期化
$error="";
//テキストファイルからデータを一行ずつ読み込み
$fp = @fopen("dat.txt", "r") or die("読み込みファイルオープンエラー");
while($str = fgets($fp)) {
// 文字列比較(trimで空白を削除)
$str = trim($str);
if ( crypt($pass,$str) == $str ) {
$error="error";
}
}
fclose($fp);
//もし$errorにerrorが入っていればそのパスワードは使用中。それ以外ならば使えるパスワード
if($error){
print "現在使用中のパスワードです<br><a href=\"pass.php\">戻る</a>";
}else{
//if条件を満たしていればファイルにパスワードを書き込み
$fp=@fopen("dat.txt","a") or die("追加書き込みオープンエラー");
fputs($fp,crypt($pass)."\r\n");
fclose($fp);
print "パスワードが登録されました<br><a href=\"pass.php\">戻る</a>";
}
0071nobodyさん2007/09/30(日) 18:05:02ID:???
>>70
$_POSTの$pass代入時にtrimしないと$str = trim($str)と整合取れない可能性あり。
$pass=trim($_POST["md5"]);

それと$_POST に代入させるのは止めた方がいい。
以後使用するなら移した$passで。

あと多分判ってるだろうけどパス未設定ならメッセージ出力して終了
0072nobodyさん2007/09/30(日) 18:23:20ID:hOfwjY6s
>>71
おおっと、ナイスアドバイスありがとうございます。
$_POSTの$pass代入時にtrimしないと$str = trim($str)と整合取れない可能性あり。
$pass=trim($_POST["md5"]);
の件については知りませんでしたので助かりました。
0073nobodyさん2007/09/30(日) 19:03:56ID:hOfwjY6s
>>69
勿論このままだと空白もパスワードとして登録されてしまいすので、空白は入らないように
しますよ。
0074nobodyさん2007/09/30(日) 19:05:07ID:???
>>55
その程度のスクリプトでcoreを吐くようじゃ環境に依存しているんで
自分で原因を追究するしかないんじゃないの?

#つか、これだけでわかる奴いるのかよ…
0075nobodyさん2007/09/30(日) 19:18:44ID:???
>>21の処理が理解できてなさそうな発言といい、自分で書いたスクリプトの
動作を把握できてなさ具合といい、プログラミングの基礎を固めるところから
やらないと後々苦労するんじゃないかと他人事ながら心配になる
0076nobodyさん2007/09/30(日) 19:41:18ID:a9TKVxAS
Vistaにxamppを入れたんですけど、
phpでcURLというのが使えないんです。
どうやってインストールするのでしょうか?
0077nobodyさん2007/09/30(日) 19:51:53ID:???
>>76
>>1にも書いてあるけどマニュアルをまず読め
該当するページを読め
http://www.php.net/manual/ja/ref.curl.php
0078nobodyさん2007/09/30(日) 20:56:19ID:a9TKVxAS
見てもよくわからなかったんですよ。
xamppでインストールされたのでphpのコンパイルって
どうやってやるんだろ?みたいな。
0079nobodyさん2007/09/30(日) 21:36:10ID:4K+ZGFPD
すみませんbmpからjpgへの変換はどうすればいいんでしょうか?
GDでは出来ませんでした。
imagemagickはレンタル鯖なので使えません。
教えてください。お願いします。
0080nobodyさん2007/09/30(日) 21:38:44ID:???
>>79
GDで出来ます。コードを晒せば間違いを指摘してくれる素敵な人が現れるでしょう。
0081792007/09/30(日) 21:43:46ID:4K+ZGFPD
>>80
すみません。もうできねえやってあきらめて試したスクリプト消してしまいました・・・
せめてどの関数使うかだけでも教えていただけないでしょうか?
0082nobodyさん2007/09/30(日) 21:52:06ID:???
間違えた答えは消さないで赤ペンで訂正って先生に教わらなかったかい?
0083nobodyさん2007/09/30(日) 21:52:32ID:???
>>81
内容まったく見てないけど、こんなんでてきた
ttp://www.dabun-doumei.com/topix/imageConvertSource.php
0084792007/09/30(日) 22:16:32ID:4K+ZGFPD
GDではbmpは使えないんです。
0085nobodyさん2007/09/30(日) 23:28:06ID:???
>>78
http://www.php.net/manual/ja/ref.curl.phpから抜粋
Win32 ユーザへの注意: このモジュールを Windows 環境で使用可能とするには、
libeay32.dll および ssleay32.dll が PATH の通った場所に存在する必要があります。

これが理解出来ない頭の構造ってのを見てみたい
PHP本家のwindows用配布物に両dllは含まれているのに何故コンパイル?
xamppには含まれないならそんな物に頼るな
0086nobodyさん2007/10/01(月) 10:43:50ID:nNJ7ChTV
メールをトリガーにしてメールの内容を解析しているのですが、
fopen("php://stdin", "r")
で、メールの内容を解析できますが、これは一体何なんでしょ?

メール送信しなくただ単にスクリプトを実行させただけでは、
中身が空っぽです。
ただ単にHTTPリクエストを受けたときに、その受けた内容を一時的に保存しているのでしょうか。
(それだと、普通にアクセスしても情報が残りそうですが・・・。)
0087nobodyさん2007/10/01(月) 10:50:10ID:i+Hfwjq6
>>86
それは標準入力取得。
スクリプトをSSHとかからコマンドで引数に何か与えて実行してみればわかる

php ./test.php "aiueo"

とかやれば"aiueo"が渡される
0088nobodyさん2007/10/01(月) 10:52:51ID:nNJ7ChTV
readfile("php://stdin");
って書いたらPHPが動かなくなったorz
0089nobodyさん2007/10/01(月) 10:56:16ID:???
>>86
標準入力です。
ですから何も入力が無ければ中身が空っぽなのは当然です。
0090nobodyさん2007/10/01(月) 12:16:45ID:???
PHPで文字列の複合可能暗号化はロジックを自作するしかないですか?
0091nobodyさん2007/10/01(月) 12:20:32ID:???
>>90
>>1
0092nobodyさん2007/10/01(月) 12:53:17ID:???
こんにちは
情報が欲しいログインするタイプのサイトへ
phpで自動化しようと思ったんですけど…

返ってきたHTTPレスポンスが
------------------------------
…サインインするには JavaScript が必要です
このブラウザでは JavaScript をサポートしていないか
現在スクリプトの使用が禁止されています。…
--------------------------------


これはもしかしてphpでは無理ですか?
0093nobodyさん2007/10/01(月) 12:59:35ID:???
>>92
>>1
0094nobodyさん2007/10/01(月) 13:03:59ID:???
なんでISOじゃないの
0095nobodyさん2007/10/01(月) 13:45:06ID:???
>>92
ログイン画面のJavaScriptで何やってるか解析すれば
0096nobodyさん2007/10/01(月) 13:53:58ID:???
>>91,93
>>1
0097nobodyさん2007/10/01(月) 14:23:07ID:???
>>96
>>1のどこを読めと?
0098nobodyさん2007/10/01(月) 14:29:23ID:???
>>97
ID表示とか環境晒すとか基本的なことじゃない?
0099nobodyさん2007/10/01(月) 14:31:45ID:???
>>98
それだったら安価先が違うだろ
0100nobodyさん2007/10/01(月) 14:40:06ID:MMTKck5h
get_magic_quotes_gpcのように、register_globalsの設定を取得したいのですが
phpinfoや設定ファイルを目視する以外にやり方ございませんか?
0101nobodyさん2007/10/01(月) 14:42:47ID:???
ini_get()
■ このスレッドは過去ログ倉庫に格納されています