【PHP】下らねぇ質問はここに書き込みやがれ 26
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/08/07(月) 13:11:50ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレは>>2-10 関連スレは>>4-10 FAQは>>6-10 辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0715nobodyさん
2006/08/18(金) 16:41:32ID:???ようやく整理がついてきました
chinpo.html上のフォーム入力を行い、【登録】ボタンを押す
↓
hoge.phpに飛び、各フォームのエラーチェックスクリプトが動く
↓
hoge.phpが表示されエラー箇所が明示される
↓
修正後、【登録】ボタンを押す
↓
正しければkakunin.htmに飛び確認画面が表示される
もし間違いだったらどこへ飛べばいいのかな?
hoge.phpに今いるわけで、新たにhogehoge.phpに飛ばせると無限にphpファイルが必要になる
だから、再度、hoge.phpに飛ばせるべきなんだが、どのようなスクリプトを書けばいいのでしょう?
0718nobodyさん
2006/08/18(金) 16:58:40ID:???あきらかに力不足でしょ。
自己満足で作ってるなら別にいいけど、
何かのシステムに実装するとか、使うつもりならば、
登録した人が悲惨な目にあうのでやめてください。
0721nobodyさん
2006/08/18(金) 17:01:33ID:???1ファイルでできるし、とりあえずフローから考えていくこった
if (POSTされたか?) {
if (エラーがあるか?) {
if (今入力画面?) {
確認画面表示
} else {
成功画面表示
}
}
入力画面表示(エラー表示)
}
入力画面表示
0723nobodyさん
2006/08/18(金) 17:09:43ID:???まず参考になるかわからんが、フォームに hiddenで現在のモードを入れておくことにする。
一番最初の登録を行う画面では、
<input type=hidden name=mode value=first>
を仕込んでおき、
登録しますか?の確認画面では、
<input type=hidden name=mode value=second>
とでもしておく。
そして、スクリプトの初期の段階で、
if ($mode == 'first'){
// エラーチェック処理
// エラーなら再度登録用画面を表示
// エラーがないなら確認画面を表示
} elseif ($mode == 'second'){
// 一応もう一度エラーチェックをする。 < ここは結構重要
// エラーなら登録用画面を表示
// エラーがないなら登録処理&登録できました画面を表示
}
こんな感じがよい。
0724nobodyさん
2006/08/18(金) 17:15:54ID:???0725723
2006/08/18(金) 17:23:21ID:???// エラーチェック処理
// エラーなら再度登録用画面を表示して終了
if ($mode == 'first'){
// 確認画面を表示
} elseif ($mode == 'second'){
// 登録処理&登録できました画面を表示
}
0726nobodyさん
2006/08/18(金) 17:29:37ID:???0727nobodyさん
2006/08/18(金) 17:31:14ID:/SUvBA3Aみんな優しい
ありがとう(泣
>>723
if ($mode == 'first'){
// エラーチェック処理 ←ここまでできています!!
// エラーなら再度登録用画面を表示 ←問題は、ここなんです!!
// エラーがないなら確認画面を表示
再度登録用画面には"header"で飛ばせばいいと思いますが、その際、
・エラーがでなかったテキストフォームには「入力データを残す」
・エラーがでたテキストフォームには「空白」にする
という処理を組み込ませたいのです
そうなると頭がふにゃふにゃになってしまっています
0728nobodyさん
2006/08/18(金) 17:31:23ID:???○スマート
0729nobodyさん
2006/08/18(金) 17:34:08ID:???亀スマソ。文字コードがあってねーんだろうね。
なんか正規表現のコードを指定する関数があったけど忘れた。
mb_なんちゃら
このスレか前スレ、もしかしたら前々スレあたりに、ひらがなにマッチしない、みたいな質問と回答あるはず。
0730nobodyさん
2006/08/18(金) 17:34:16ID:???0731nobodyさん
2006/08/18(金) 17:34:18ID:???>再度登録用画面には"header"で飛ばせばいいと思いますが
そこが違うんだよ。
hoge.phpの中から、直接HTML文を書き出す。
ちょっと面倒だろうが地道に入力していけ。
工夫次第では、初期登録画面を書き出す(おそらくあなたは別HTMLファイルでやってるだろうけど)処理を
活用することができるが。
0732nobodyさん
2006/08/18(金) 17:41:26ID:???最初の入力画面では$inputは空に、エラーが出たら
この中に入力した文字が入ってるようにする。
最後の確認画面は別のHTML用意した方が良いね。
0733nobodyさん
2006/08/18(金) 17:43:16ID:???0734nobodyさん
2006/08/18(金) 17:44:52ID:6myYxIucその複数行のうち、3行目だけを抜き取るみたいな処理を行いたいのですが
fgets()は、fopen()されたファイルしか処理できないんですね・・
なんとか、これでやろうと思えば、一回受け取ったデータをファイルに保存して
それから、ファイル処理としてfgets()を使うなども考えたのですが、ずいぶん面倒と思いまして
それで、今度はexplode()を使って、\nで区切って改行ごとに、配列に入れていって
必要な行だけを取り出そうと思ったのですが
改行を\nでは、判別してくれないんですかね・・
いろいろ考えているのですが、何か良い方法があったらアドバイスお願いします。
0735nobodyさん
2006/08/18(金) 17:46:33ID:/SUvBA3Aなるほど、、、もっとも避けたかった方法が答えでしたか(涙
例えば
print("<h1>monster()</h1>");
print "<input type=\"submit\" value=\"2ch大好きだぜ\">";
print "<input type=\"submit\" value=\"でもVIPはな\">";
とな感じでprint使って1つのphpで表現する方法ですね
むー頑張ってみる
また質問します!!
みんなありがとう
0736nobodyさん
2006/08/18(金) 17:49:16ID:/SUvBA3Aそうですね
一応MySQLにぶちこむので最終確認画面はphpファイルでいこうと思います!!
>>733
フォーム認証後の画面なのでセッションは貼っていますが
これ以上、複雑にするのは俺には無理のようです・・・
0738nobodyさん
2006/08/18(金) 17:56:43ID:???ttp://jp.php.net/manual/ja/function.explode.php
このマニュアルで
$exploded = explode("\n",$words);
と使っているので、\nで区切れないということはないはず。
0739nobodyさん
2006/08/18(金) 18:03:38ID:/SUvBA3Aいかんせん、まわりに相談する人が誰もいない
最初はMySQL5.0に6000万レコードを書き込むスクリプトから開始し
次にMD5に変換させるスクリプトを走らせると、途中で地獄のdump吐くは
オシムが代表監督になるわ、直志が召集されるわ
MLはNifty時代から好きになれず
2chでいじめられながら頑張るのが大好きだ!!
これからもよろしくおながいしまつ
0740nobodyさん
2006/08/18(金) 18:37:45ID:???> print("<h1>monster()</h1>");
> print "<input type=\"submit\" value=\"2ch大好きだぜ\">";
> print "<input type=\"submit\" value=\"でもVIPはな\">";
> とな感じでprint使って1つのphpで表現する方法ですね
せめて
<?php
プログラム
?>
<h1>monster()</h1>
<input type="submit" value="2ch大好きだぜ">
<input type="submit" value="でもVIPはな<?php echo $変数 ?>">
みたいにPHPモード抜けて普通にHTML書こうよ。
しかしすでにセッション使ってて前の入力内容を復元させることが難しい、
ってやつも相当珍しい気がするんだが。
0741nobodyさん
2006/08/18(金) 18:39:30ID:???explodeで正解だよ。
ちょっと自分で書いたexplodeのとこ見せてみ。それ多分書き方間違ってるだけ。
0742nobodyさん
2006/08/18(金) 18:42:41ID:IH/AT+iL適切なスレが見つかりませんでした。
PHPでAmazonのWebサービスを使ってプログラミングしているのですが、
Amazon API でBooks の情報を取得した時、
ItemAttributesが通常はオブジェクトなのですが、
まれに配列変数になってて、要素のAutherとかが、0から始まる配列変数になってる事がありますよね?
つまり、var_dumpすると以下のようになっているはずのものが、
["ItemAttributes"]=> &object(stdClass)(13) { ["Author"]=> string(16) "ほげ ほげお"
以下のようになっている。
["ItemAttributes"]=> array(16) { [0]=> string(16) "ほげ ほげお"
これを回避する方法があればお教え下さい。
0から始まる配列変数が全て、Autherなどのデータなら良いのですが、
間に本の種類(単行本)などが入っているので、もし回避出来ないのなら、本の種類全てをプログラムに入力して、
「本の種類の前はAuther、本の種類の後はCreator」というような事をしないとダメでしょうか?
環境など:
PHP4.3.10
PearのSOAP(var0.9.4)ライブラリ
Amazon ECS 4.0
0743734
2006/08/18(金) 18:47:03ID:???お二方アドバイスありがとうございました。
>>738氏が示してくださった、
>$exploded = explode("\n",$words);
>と使っているので、\nで区切れないということはないはず。
という、ことからきっと区切りが、\nではないのだと思いはじめ、まずそこを調べたところ
私が改行だと思っていたものは、<br />でした。
\nの代わりに<br />としたところ満足のいく結果を得られました。
非常にくだらなく、低レベルな質問になってしまって失礼しました。
お騒がせ致しました。
0744nobodyさん
2006/08/18(金) 19:10:58ID:???クラス定義より前にセッションなりからデータを読み出しちゃってる、ってことはない?
マニュアルのセッションの辺りに説明があると思うけど、セッションを自動スタートで使うと
クラス定義の前に変数展開をしちゃうからクラスの形で定義できない問題とかがあるよ。
0746nobodyさん
2006/08/18(金) 20:37:04ID:???2.悔しかったのでがんばって自分で調べた
後者ならお前は伸びる
0747nobodyさん
2006/08/18(金) 20:37:14ID:???あまり重くない処理で判定するにはどうしたら良いでしょうか??
うるう年や、その月毎の日数などをその都度計算して、与えられた日付と比較する関数などを
作ることも考えましたが、どうにも効率が悪くてスマートじゃないと思ったもので・・・
0749nobodyさん
2006/08/18(金) 20:43:40ID:EScfbsFP情報をお願いしますm(_ _)m
http://imona.jp/news/
http://kabubu.net/sub/news/news.php
0750nobodyさん
2006/08/18(金) 20:48:34ID:???確かにくだらない質問だがな、
ここは何かを探してくださいといったことはしていない。
自分で作るっていうなら話は別だが、
探してるっていうなら他のスレをあたりなさい。
0752nobodyさん
2006/08/18(金) 21:25:14ID:???mb_internal_encoding("Shift_JIS");
mb_regex_encoding("Shift_JIS");
これ書いたらいけました^^
調べるのに2時間もかかりましたよ^^
0753nobodyさん
2006/08/18(金) 21:34:58ID:???うわ!!
リファレンス本も持ってるというのに、
そんな関数はハナっから無いと思い込んで見落としてました・・・。
ありがとうございます。
0754nobodyさん
2006/08/19(土) 00:33:54ID:???ちなみにmktime()も日付チェックの機能を備えてて、
不正な日時が入力されたら補正して返すから
入力 != 出力 で妥当性をチェック可能。
0755nobodyさん
2006/08/19(土) 01:22:52ID:???チェックするだけなら、checkdate() の方が速いけどね。
これを機にソースも読んでみたけど、checkdate() は大した事してないし。
mktime() は当然いろいろやってるが。
0756nobodyさん
2006/08/19(土) 01:44:00ID:+xxPG0V/で
Warning: socket_connect() [function.socket-connect]: unable to connect [13]: Permission denied
という接続時のエラーによりこの後のデータ送信ができないのですが、
このエラーの解決方法をご存知の方、教えてもらっていいですか?
0757nobodyさん
2006/08/19(土) 03:44:33ID:01c3DaJfforeachで配列をループにかけている最中に、
今配列の中の何番目かということを知ることって出来ないんでしょうか?
いままでそれを知る必要がある時は
foreachじゃなくてforでループまわして現在の配列のナンバーを取得してたんですが、
もしかしてforeach中でもそれを簡単に知る方法があるんじゃないかと思ったので
質問してみます。
よろしくおねがいします
0758nobodyさん
2006/08/19(土) 04:02:07ID:???foreach($array as $key => $value) {
echo "$value は $key の位置にあります<br>"
}
連想配列で何番目なのかを知ろうと思ったら
$no = 0;
foreach($array as $key => $value) {
echo "$value は $no番目にあります<br>"
$no ++;
}
ってするしか無いと思う。
0759nobodyさん
2006/08/19(土) 05:11:13ID:???なるほど
ありがとうございます!
ただSimpleXMLで取得したオブジェクトに対しては
根本的に連想配列になっているのか、
使えないみたいですね
これはちょっと残念ですが、他についてはおかげさまで随分楽になりそうです
0760nobodyさん
2006/08/19(土) 05:49:04ID:???0762nobodyさん
2006/08/19(土) 07:50:57ID:???ユーザからわたってきた
hoge.jpg
というデータが存在するかしないかをチェックしたいのです。
0764nobodyさん
2006/08/19(土) 08:07:38ID:???is_fileやfile_existsだとfalseが返されてしまいます
0765nobodyさん
2006/08/19(土) 08:49:32ID:???・外部の鯖のURLなので、is_fileやfile_existは使えない事は確認済み
ってことかい?
0766nobodyさん
2006/08/19(土) 08:50:07ID:???そういうのは普通「渡す」とは言わないけどな。
ま、file_exists()は自分のサーバー内のファイルを調べる関数だから当然だな。
んじゃfile()で読み込んでみれば?allow_url_openがOnの環境限定だけど。
ホントはHEADアクセスで確認する方が負荷かからなくていいんだけどお手軽でしょ。
0767nobodyさん
2006/08/19(土) 09:22:55ID:???$temp_file はテンポラリに入っています。書き出す前です。
この様な段階でmd5_file する事は無理なのでしょうか?
現在は move_uploaded_file chmod で一度書き出し md5_file した後 unlink で消しています。
この様な面倒な方法以外の方法があればご教示ください。
>>762
前スレで上記の様な質問をした者ですがこれと同じ事?
0768nobodyさん
2006/08/19(土) 09:49:17ID:???>>762はアップロードしてるわけじゃないから全然別。
他所のサーバに置いてある画像をURL有効チェックしたいだけらし。
0769nobodyさん
2006/08/19(土) 09:57:10ID:???0770nobodyさん
2006/08/19(土) 10:00:46ID:???とか見たような気がするんですが、その場合、同様に配列に読み込みたい場合は
fgetsを使うんでしょうか?
0773nobodyさん
2006/08/19(土) 10:09:01ID:???'w' を使いたい処理の場合も、 '+r' で開き、ファイルロックしてから、トランケイトして
ファイルサイズを0にし、ファイル先頭から書き出すのがもっともよいとされている。
これは、fopen を w で開いた直後、ロックの処理をする前にファイルサイズが0になってしまうため、
この間に別プロセスがファイルをreadすると、空のファイルを読んでしまうことになるからだ。
+r で開いてからロックすれば、この間はファイルのデータは保たれているため、
上記のようなデータの損失が発生することはない。
0774nobodyさん
2006/08/19(土) 10:11:52ID:???r+とかa+使った方が無難ってだけじゃないの?
あとバッファはset_file_bufferで0にしたほうがいいね
fileは読み込むだけでファイルの更新自体はしないし関係ないと思うよ
0775nobodyさん
2006/08/19(土) 10:12:48ID:???0776nobodyさん
2006/08/19(土) 10:20:51ID:???まあ表示だけならデータが表示されないだけで問題なさそうかと思われるけど、
どうせだったらそんなことが起こらない方法で書いた方がいいに決まっている。
HTMLにデータ込みのフォームを書き出す処理の中でデータが抜けて、
そのままそのフォームを登録してしまう(必須でない項目が抜ける可能性)や、
rで読んでレコードを編集したあと、あらためて wで開いてレコードを書き出す、
その上に処理のロックをかけていない、などの Let's PHP みたいな不備のあるソースを書くと
データが消えてしまう恐れがあるね。
0780nobodyさん
2006/08/19(土) 11:49:35ID:9NEEnAjJ当然といえば当然なのですが、こういったタグを置き換えるような仕組みを作った場合に、上のような現象を回避する方法はありますか?
0781777
2006/08/19(土) 11:56:01ID:???撒き餌がたらなかったらしい。
0784nobodyさん
2006/08/19(土) 13:02:53ID:???どういう正規表現使ったんだ?
普通に [a] と [/a] ではさまれた文字列を<a>タグのhref属性に変えるような仕組みであればそんなおかしなことにならないはずだが。
0786nobodyさん
2006/08/19(土) 14:04:04ID:???適当だけど
$str = "[a]http://www.test.com/[/a][/a][a]aaaa[/a";
var_dump($str);
$str = preg_replace("/\[a\](http:\/\/.+?\..+?)\[\/a\]/", "<a href=\"$1\">$1</a>", $str);
var_dump($str);
0787nobodyさん
2006/08/19(土) 14:46:12ID:kKZJT4No1.shift-jisのファイルを用意する
2.print mb_convert_encoding( file_get_contents( そのファイル ) ,'EUC-JP');
こういうのを作ってブラウザで再読み込みを続けると、どういうわけか
入力もプログラムも全く変えてないのに、ちゃんと変換したり、しなかったりと動作が変わります。
これじゃ危なっかしくて怖いんですけど、こういうものなのですか?
winXPとPHP 5.0.3 (cli) (built: Dec 15 2004 08:07:57)です。
0788nobodyさん
2006/08/19(土) 14:49:16ID:???そういうものです。
ヤフーのトップページでさえ、たまに文字化けして表示されることがあります。
ブラウザ側のバグでしょう。
0789nobodyさん
2006/08/19(土) 14:50:17ID:???>これじゃ危なっかしくて怖い
ブラウザに何か出力する前にきちんとヘッダを送信してやれボケ。
HTTPの知識もPHPの知識もロクに勉強もせず、危なっかしいのはお前のほうだチンカス。
0791780
2006/08/19(土) 14:51:58ID:9NEEnAjJ正規表現はよくわからないので、str_replaceを使いました。
[a]があったら<a href="に置き換えて、[/a]があったら">〜〜</a>にしてとか、そんなしょぼい実装です。
783さんのような、検査のロジックを組み込みたいと思います。
ありがとうございました。
0795787
2006/08/19(土) 14:59:16ID:kKZJT4Noいや、ソースを読むとソースが化けている(というか元のままだったり、変換されてたり)で。
ブラウザの問題はとりあえずないものとして。
>794
そこ…なのかな?
それにしても、再実行ごとに毎回違った結果がでてくるものなのですか?
0798764
2006/08/19(土) 15:09:12ID:???ググってみたのですが、分かりませんでした
できれば負荷のかからない方法で検討したいです
お願い致しますm(_ _)m
0799nobodyさん
2006/08/19(土) 15:16:58ID:???FAILED TEST SUMMARY
---------------------------------------------------------------------
Bug #16069 [ext/iconv/tests/bug16069.phpt]
iconv stream filter [ext/iconv/tests/iconv_stream_filter.phpt]
#16069は「ミリバールミリバール(°Д°)」ていう文字が沢山入ってて何かEUC-JPのテスト?のようなファイルでした。
ググると同じファイルでfailedを出してるものが見つかりましたので特に気にする必要はないファイルでしょうか。
よろしくお願いします。
環境:FedoraCore3 PHP5.1.4→5.1.5へ変更中に発生
0800nobodyさん
2006/08/19(土) 15:24:26ID:???よくわからん
ミリバールミリバール(°Д°) ってwwwww誰だよ犯人はwwwwww
0801nobodyさん
2006/08/19(土) 15:52:26ID:???0802nobodyさん
2006/08/19(土) 15:53:07ID:???0803nobodyさん
2006/08/19(土) 15:54:06ID:???結局そのままインストールしました。
とりあえず無事にバージョンがあがりましたので気にしないことにします。
一応証拠?です。
つ【http://vista.xii.jp/img/vi5597040543.gif】
0804nobodyさん
2006/08/19(土) 15:54:51ID:???エラーは出なかったけど
なぜギコ猫を使ったのかと小一時間(ry
0805nobodyさん
2006/08/19(土) 15:56:35ID:???6まだー?
PHP6の主な変更点
Javaと統一されますた。以降Javaをお使いください。
0806803
2006/08/19(土) 16:00:02ID:???イマイチよくわかりませんがセットで
>iconv stream filter [ext/iconv/tests/iconv_stream_filter.phpt]
も失敗しているのでやや気になります。
試しにphpinfoを開くとiconv関数は「enabled」でした。
何が原因なのかソースを見た限り皆目検討がつきません。。。モナーではなくギコ猫なのが原因なのでしょうか。
0807nobodyさん
2006/08/19(土) 16:19:51ID:???サーバーが見つからないとエラーが出るようになりました。
しかしローカルで実行するとエラーがでず、原因がわかりません。
$xml = simplexml_load_string($content);
$xml->registerXPathNamespace('aws', 'http://webservices.amazon.com/AWSECommerceService/2006-05-17');
$result = $xml->xpath('//aws:RequestId');
phpのバージョンはレンタルサーバーが5.1.4でローカルも5.1.4です。一体何が原因なんでしょうか?
0808nobodyさん
2006/08/19(土) 16:54:36ID:???$host = "example.com"
$uri = "/bar/foo.txt"
$header = "Host: ${host}\r\n";
$header .= "Connection: Close;\r\n\r\n";
$fp = fsockopen($host, 80, $errno, $errstr);
if (!$fp) {
exit;
}
fputs($fp, "HEAD ${uri} HTTP/1.1\r\n");
fputs($fp, $header);
while (!feof($fp)) {
echo fgets($fp, 128);
}
こんなの
0809nobodyさん
2006/08/19(土) 16:55:21ID:???0811nobodyさん
2006/08/19(土) 17:08:04ID:+ytFUBf1fopen() でテキストファイルを作っていくプログラムを作りたいのですが、
htmlフォームからユーザーにテキストを入力させ、その内容をファイルに反映せさたいのです。
$fp = fopen("./test.txt","w");
fwrite($fp,"This is file write test.\n");
fclose($fp);
ここまでは理解できるのですが、
問題はこれをどうやってhtmlフォームと連携させるのかということです。
どの当たりを勉強したらよいか解らず、苦戦しています。
解るかた、ヒントだけでも頂けたらと思います。
よろしくお願いします。
0812nobodyさん
2006/08/19(土) 17:11:01ID:???0813nobodyさん
2006/08/19(土) 17:13:33ID:???http://www.php.net/manual/ja/tutorial.forms.php
0814nobodyさん
2006/08/19(土) 17:24:32ID:???いったん配列なりに入れて
チェック入れろ
■ このスレッドは過去ログ倉庫に格納されています