Кнопка загрузки PHP не работает Создание пустого файла

У меня есть две кнопки в форме, одна – для отправки, а вторая кнопка загружает вывод, указанный в текстовом поле.

Представление отлично работает, но кнопка загрузки создает пустой файл и не записывает данные выходной текстовой области.

Вот код:

<?php error_reporting(0); $mytext = ""; $txt = preg_replace('/\n+/', "\n", trim($_POST['inputtext'])); $text = explode("\n", $txt); $output = array(); if(isset($_POST["submit"])) { for($i=0;$i<count($text);$i++) { $output[] .= trim($text[$i]) . ' Text added with output'.PHP_EOL; } } if(isset($_POST["download"]) ) { $handle = fopen("file.txt", "w"); fwrite($handle, implode($output)); fclose($handle); header('Content-type: application/octet-stream'); header('Content-Disposition: attachment;filename='.basename('file.txt')); header('Expires: 0'); ob_end_clean(); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize('file.txt')); readfile('file.txt'); exit; } ?> <form method="POST" action="test.php"> <textarea name="inputtext" rows="10" cols="100" placeholder="Enter Any Text!" required><?php if(!empty($_POST["inputtext"])) { echo $_POST["inputtext"]; } ?></textarea> <br><br> <input type="submit" name="submit" value="Do it!"> <br><br> <p>Output goes here. </p><textarea name="oputputtext" rows="10" cols="100" ><?php echo implode($output);?></textarea> <input type="submit" name="download" value="Download Output"> </form> 

Вы должны сгенерировать вывод также при загрузке (если вы не берете его со второго текстового поля), поэтому используйте if(isset($_POST["submit"]) || isset($_POST["download"]) ) в тесте , а не только if(isset($_POST["submit"]))

Окончательный код будет выглядеть так:

 <?php error_reporting(0); $mytext = ""; $txt = preg_replace('/\n+/', "\n", trim($_POST['inputtext'])); $text = explode("\n", $txt); $output = array(); /* CHANGED HERE */ if(isset($_POST["submit"]) || isset($_POST["download"]) ) { for($i=0;$i<count($text);$i++) { $output[] .= trim($text[$i]) . ' Text added with output'.PHP_EOL; } } if(isset($_POST["download"]) ) { $handle = fopen("file.txt", "w"); fwrite($handle, implode("\r",$output)); fclose($handle); header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename('file.txt')); header('Expires: 0'); ob_end_clean(); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize('file.txt')); readfile('file.txt'); exit; } ?> <form method="POST" action="test.php"> <textarea name="inputtext" rows="10" cols="100" placeholder="Enter Any Text!" required><?php if(!empty($_POST["inputtext"])) { echo $_POST["inputtext"]; } ?></textarea> <br><br> <input type="submit" name="submit" value="Do it!"> <br><br> <p>Output goes here. </p> <textarea name="oputputtext" rows="10" cols="100" ><?php echo implode($output);?></textarea> <input type="submit" name="download" value="Download Output"> </form>