- ベストアンサー
HTML phpファイルからHTMLの書き出しについての質問
- phpファイルからHTMLの書き出しについて質問です。mysqlから取り出したデータを処理するためのphpのwhile文があるため、うまくいきません。phpがある場合、どうすればうまくいきますか?
- PHP Version 5.2.5でファイルロックを使用してHTMLの書き出しを行っています。phpのwhile文があるため処理がうまくいきません。phpがある場合の解決方法を教えてください。
- HTMLの書き出しについての質問です。phpのwhile文があるため、mysqlから取り出したデータをうまく処理できません。どのようにすればうまくいくのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> file_put_contentsを使いたいのですがPHP Version 5.2.5ではバグがあって使えないようです 失礼しましたm(_ _)m 最初のfopenの書き方でOKです。 ファイルロックに関して http://tumblr.tokumaru.org/post/37141017115/php5-3-2-fclose PHP5.2.5であれば flock($fp, LOCK_UN); は不要みたいですね。 >> mysqliに変更したいのですがレンタルサーバーが対応していませんでした あーこれは仕方ないですね^^; 【訂正】 サンプル内 × _mysql_fetch_assoc ○ mysql_fetch_assoc
その他の回答 (1)
>> PHP Version 5.2.5です >> ファイルロックはこんな感じでしょうか? PHPバージョン5.2.6以降だとモード「c」でオープンできるのですが、「w」モードではわざわざfopenでやる意味がないですね。 http://ntter0.blog76.fc2.com/blog-entry-13.html http://php.net/manual/ja/function.file-put-contents.php というわけでシンプルにfile_put_contentsを使えばいいと思います。 >> whileなどのphpがあるためうまくいきませんでした ヒアドキュメントの使い方を再確認してください。 http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc あと、freeとかcloseとかここでスクリプトが終わるのであればする意味がないです。説明を見てください。 http://www.php.net/manual/ja/function.mysql-free-result.php http://www.php.net/manual/ja/function.mysql-close.php さらに言えばこの「mysql_○○」関数自体が非推奨で近い将来廃止される予定なので、mysqliもしくはPDOを使うようにしてください。 http://www.php.net/manual/ja/book.mysqli.php http://php.net/manual/ja/book.pdo.php どちらかと言えばPDOがオススメ。いちいち1回1回 mysql_connect(...) or die('Error'); のように例外処理を書かなくても、 try { $pdo = new PDO(...); } catch (Exception $e) { echo 'Error: '.$e->getMessage(); } とするだけで全部まとめてcatchブロックで回収できます。PDOクラスがExceptionクラスの拡張クラスであるPDOExceptionを自動的に例外発生時にスローしてくれるのです。 【サンプル】 <?php mysql_connect(...) or die('Error'); $recordSet = mysql_query(...); $cells = ''; while ($table = _mysql_fetch_assoc($recordSet)) { $cells .= sprintf('<tr><td>%s</td><td>%s</td></tr>'.PHP_EOL, $table['id'], htmlspecialchars($table['name'], ENT_QUOTES) ); } $html = <<<EOD <html> <head> <title>タイトル</title> </head> <body> <table> {$cells}</table> </body> </html> EOD; file_put_contents('index.html', $html, LOCK_EX); 【動作確認】 http://ideone.com/qEaETP http://codepad.viper-7.com/cAZKHC http://codepad.org/huJ1uZt0
お礼
お答え頂きありがとうございます file_put_contentsを使いたいのですがPHP Version 5.2.5ではバグがあって使えないようです LOCK_EXでロックしないバグがあると検索したら出てきました>< ロックだけ違う処理をするのは無理ですか? mysqliに変更したいのですがレンタルサーバーが対応していませんでした(泣。実際に変更したら真っ白に^^; コアサーバーあたりに引越す予定ですがそれまではmysql系になってしまいます。すいません
お礼
たびたびお答え頂きありがとうございます 書き出せました(感謝