電子書籍の厳選無料作品が豊富!

phpファイルからHTMLの書き出しについての質問です
できるとこまでやってみたんですが途中にmysqlから取り出したデータを処理するためのwhileなどのphpがあるためうまくいきませんでした
途中にphpがある場合、どうすればうまくいきますか?

PHP Version 5.2.5です

ファイルロックはこんな感じでしょうか?

よろしくお願いします




$html = <<<END_OF_DATA
<html>
<head>
<title>タイトル</title>
</head>

<body>
<table>
<?php
while ($table = mysql_fetch_assoc($recordSet)) {
?>
<tr>
<td>{$table['id']}</td>
<td><?php print(htmlspecialchars($table['name'], ENT_QUOTES)); ?></td>
</tr>
<?php
}
mysql_free_result($recordSet) or die("MySQL切断に失敗しました。");
mysql_close($link) or die("MySQL切断に失敗しました。");
?>
</table>
</body>
</html>
END_OF_DATA;

$filename = 'index.html';

$fp = fopen($filename,'w');

stream_set_write_buffer($fp,0);

flock($fp, LOCK_EX);

fwrite($fp, $html);

flock($fp, LOCK_UN);

fclose($fp);

A 回答 (2件)

>> file_put_contentsを使いたいのですがPHP Version 5.2.5ではバグがあって使えないようです



失礼しましたm(_ _)m
最初のfopenの書き方でOKです。

ファイルロックに関して
http://tumblr.tokumaru.org/post/37141017115/php5 …

PHP5.2.5であれば flock($fp, LOCK_UN); は不要みたいですね。


>> mysqliに変更したいのですがレンタルサーバーが対応していませんでした

あーこれは仕方ないですね^^;



【訂正】

サンプル内

× _mysql_fetch_assoc
○ mysql_fetch_assoc
    • good
    • 0
この回答へのお礼

たびたびお答え頂きありがとうございます
書き出せました(感謝

お礼日時:2013/06/08 22:58

>> 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-conte …

というわけでシンプルにfile_put_contentsを使えばいいと思います。


>> whileなどのphpがあるためうまくいきませんでした

ヒアドキュメントの使い方を再確認してください。
http://www.php.net/manual/ja/language.types.stri …


あと、freeとかcloseとかここでスクリプトが終わるのであればする意味がないです。説明を見てください。
http://www.php.net/manual/ja/function.mysql-free …
http://www.php.net/manual/ja/function.mysql-clos …

さらに言えばこの「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
    • good
    • 0
この回答へのお礼

お答え頂きありがとうございます
file_put_contentsを使いたいのですがPHP Version 5.2.5ではバグがあって使えないようです
LOCK_EXでロックしないバグがあると検索したら出てきました><
ロックだけ違う処理をするのは無理ですか?

mysqliに変更したいのですがレンタルサーバーが対応していませんでした(泣。実際に変更したら真っ白に^^;
コアサーバーあたりに引越す予定ですがそれまではmysql系になってしまいます。すいません

お礼日時:2013/06/08 14:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!