Спорить не буду =) Полиморфы рулят, дядько? Проблема в том, что зачем в гостевой книге нужно подобное? Разве что в макетном варианте, на практике оно неудобно
На практике — оно не нужно для гостевой книги. Но никто не писал, что это практика. Нормальное тестовое задание.
PHP: <?php echo '<pre>' . htmlspecialchars(file_get_contents(__FILE__)); ?> Интересно я прохожу этот тест?
вообще задачка, мало применимая. я бы сделал так: Разбил бы файлик каким-нибудь символом, например '#' на 2 части В первой бы написал форму, функцию записи в тот же файл (через a+) и читалку... Во вторую бы просто добавлял записи из гостевой в любом формате, предварительно их закоменив.... где-то вроде бы так ...
Очень извиняюсь за навязчивость .... Закинула на сервер http://test-php.mcdir.ru/ , установила chmod 777, и ничего.... включила "вывод ошибок" и Код (Text): Fatal error: Call to undefined function: file_put_contents() in /home/httpd/vhosts/test-php.mcdir.ru/httpdocs/index.php on line 20
PHP: <html> <body> <form action="" method="post"> <label for="name">Имя:</label><br/> <input type="text" name="name" id="name" style="width:400px"/><br/> <label for="data">Сообщение:</label><br/> <textarea name="data" id="data" style="width:400px"></textarea><br/> <input type="submit" value="послать"/><br/> </form> <?php if (!function_exists('file_put_contents')) { function file_put_contents($filename, $data) { $f = @fopen($filename, 'w'); if (!$f) { return false; } else { $bytes = fwrite($f, $data); fclose($f); return $bytes; } } } $data = file_get_contents(__FILE__); list($code, $recs) = explode('<'.'!---->', $data); $recs = explode("\n",$recs); if ($_SERVER['REQUEST_METHOD']=='POST') { $name = htmlspecialchars($_POST['name']); $data = htmlspecialchars(nl2br($_POST['data'])); $row = $name.'>'.$data; $recs[] = $row; file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs)); } echo 'Оставленные сообщения:<br/>'; foreach ($recs as $rec) { $record = explode('>',$rec); echo '<p>'; echo '<b>'.@$record[0].'</b> написал:<br/>'; echo @$record[1]; echo '</p><hr/>'; } ?> </body> </html> <?php exit; ?> <!---->
Я бы расширение поменял )) а я правдо не знаю как... может так PHP: <?php ob_start(); ?> $data = file_get_contents(__FILE__); list($code, $recs) = explode('<'.'!---->', $data); $recs = explode("\n",$recs); if ($_SERVER['REQUEST_METHOD']=='POST') { $name = htmlspecialchars($_POST['name']); $data = htmlspecialchars(nl2br($_POST['data'])); $row = $name.'>'.$data; $recs[] = $row; file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs)); } echo 'Оставленные сообщения:<br/>'; foreach ($recs as $rec) { $record = explode('>',$rec); echo '<p>'; echo '<b>'.@$record[0].'</b> написал:<br/>'; echo @$record[1]; echo '</p><hr/>'; } <? $res=nl2br(ob_get_contents()); ob_end_clean(); print $res; ?>
флоппик задание было как сделать чтобы файл вывел код самого себя? зачем нам файл гет контентс? вообщем было типа так PHP: <? $data = file_get_contents(__FILE__); list($code, $recs) = explode('<'.'!---->', $data); $recs = explode("\n",$recs); if ($_SERVER['REQUEST_METHOD']=='POST') { $name = htmlspecialchars($_POST['name']); $data = htmlspecialchars(nl2br($_POST['data'])); $row = $name.'>'.$data; $recs[] = $row; file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs)); } echo 'Оставленные сообщения:<br/>'; foreach ($recs as $rec) { $record = explode('>',$rec); echo '<p>'; echo '<b>'.@$record[0].'</b> написал:<br/>'; echo @$record[1]; echo '</p><hr/>'; } ?> а стало так PHP: <?php ob_start(); ?> $data = file_get_contents(__FILE__); list($code, $recs) = explode('<'.'!---->', $data); $recs = explode("\n",$recs); if ($_SERVER['REQUEST_METHOD']=='POST') { $name = htmlspecialchars($_POST['name']); $data = htmlspecialchars(nl2br($_POST['data'])); $row = $name.'>'.$data; $recs[] = $row; file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs)); } echo 'Оставленные сообщения:<br/>'; foreach ($recs as $rec) { $record = explode('>',$rec); echo '<p>'; echo '<b>'.@$record[0].'</b> написал:<br/>'; echo @$record[1]; echo '</p><hr/>'; } <? $res=nl2br(ob_get_contents()); ob_end_clean(); print $res; ?>
задание было вывести текст самого себя. Не надо хвататься за словесное определение. Задача академическая. Исполняющаяся программа должна вывести свой собственный исходник с точностью до байта, не обращаясь к файловой системе за этими данными. Так тебе легче?
нет проблем босс PHP: <? print readfile(__FILE__); exit; $data = file_get_contents(__FILE__); list($code, $recs) = explode('<'.'!---->', $data); $recs = explode("\n",$recs); if ($_SERVER['REQUEST_METHOD']=='POST') { $name = htmlspecialchars($_POST['name']); $data = htmlspecialchars(nl2br($_POST['data'])); $row = $name.'>'.$data; $recs[] = $row; file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs)); } echo 'Оставленные сообщения:<br/>'; foreach ($recs as $rec) { $record = explode('>',$rec); echo '<p>'; echo '<b>'.@$record[0].'</b> написал:<br/>'; echo @$record[1]; echo '</p><hr/>'; } ?>