Обновите страницу php после загрузки файла

Мне нужно загрузить файл на сервер с помощью PHP и HTML-формы.

Я использовал пример w3school: загрузка файла PHP 5, которая очень полезна и мне очень помогла.

Конечно, мне нужно адаптировать этот код, чтобы решить мою проблему, так что это ситуация:

1) HTML-форма помещается в fileform.php :

<!-- fileform.php --> <form action="upload.php" method="post" enctype="multipart/form-data"> <h3>Upload a file:</h3> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload" name="submit"> </form> 

2) это мой upload.php :

 <?php /* upload.php */ set_time_limit(0); $targetDir = "/path/to/upload/dir"; $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]); $upload = 1; $fileType = pathinfo($targetFile, PATHINFO_EXTENSION); if(isset($_POST["submit"])) { /* Check file size */ if($_FILES["fileToUpload"]["size"] > 50000000000) { echo "Sorry, your file is too large."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Allow certain file formats */ if($fileType != "data" ) { echo "Sorry, non valid filetype."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Check if $uploadOk is set to 0 by an error */ if($upload == 0) { echo "Sorry, your file was not uploaded."; ob_end_flush(); include("fileform.php"); } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } ob_end_flush(); include("fileform.php"); } } в <?php /* upload.php */ set_time_limit(0); $targetDir = "/path/to/upload/dir"; $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]); $upload = 1; $fileType = pathinfo($targetFile, PATHINFO_EXTENSION); if(isset($_POST["submit"])) { /* Check file size */ if($_FILES["fileToUpload"]["size"] > 50000000000) { echo "Sorry, your file is too large."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Allow certain file formats */ if($fileType != "data" ) { echo "Sorry, non valid filetype."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Check if $uploadOk is set to 0 by an error */ if($upload == 0) { echo "Sorry, your file was not uploaded."; ob_end_flush(); include("fileform.php"); } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } ob_end_flush(); include("fileform.php"); } } в <?php /* upload.php */ set_time_limit(0); $targetDir = "/path/to/upload/dir"; $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]); $upload = 1; $fileType = pathinfo($targetFile, PATHINFO_EXTENSION); if(isset($_POST["submit"])) { /* Check file size */ if($_FILES["fileToUpload"]["size"] > 50000000000) { echo "Sorry, your file is too large."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Allow certain file formats */ if($fileType != "data" ) { echo "Sorry, non valid filetype."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Check if $uploadOk is set to 0 by an error */ if($upload == 0) { echo "Sorry, your file was not uploaded."; ob_end_flush(); include("fileform.php"); } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } ob_end_flush(); include("fileform.php"); } } в <?php /* upload.php */ set_time_limit(0); $targetDir = "/path/to/upload/dir"; $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]); $upload = 1; $fileType = pathinfo($targetFile, PATHINFO_EXTENSION); if(isset($_POST["submit"])) { /* Check file size */ if($_FILES["fileToUpload"]["size"] > 50000000000) { echo "Sorry, your file is too large."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Allow certain file formats */ if($fileType != "data" ) { echo "Sorry, non valid filetype."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Check if $uploadOk is set to 0 by an error */ if($upload == 0) { echo "Sorry, your file was not uploaded."; ob_end_flush(); include("fileform.php"); } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } ob_end_flush(); include("fileform.php"); } } в <?php /* upload.php */ set_time_limit(0); $targetDir = "/path/to/upload/dir"; $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]); $upload = 1; $fileType = pathinfo($targetFile, PATHINFO_EXTENSION); if(isset($_POST["submit"])) { /* Check file size */ if($_FILES["fileToUpload"]["size"] > 50000000000) { echo "Sorry, your file is too large."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Allow certain file formats */ if($fileType != "data" ) { echo "Sorry, non valid filetype."; $upload = 0; ob_end_flush(); include("fileform.php"); } /* Check if $uploadOk is set to 0 by an error */ if($upload == 0) { echo "Sorry, your file was not uploaded."; ob_end_flush(); include("fileform.php"); } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } ob_end_flush(); include("fileform.php"); } } 

Я могу загрузить файл правильно, но я не могу правильно загрузить страницу PHP. Появляется только страница с белым backgroung, показывающим:

Файл file.data загружен.

Предупреждение: session_start () [function.session-start]: не удается отправить ограничитель кеша сеанса – уже отправленные заголовки (вывод запущен на /var/www/upload.php:40) в /var/www/login.php в строке 4

с некоторыми значками страницы PHP …

Я уверен, что я делаю что-то неправильно в файле upload.php, но я не знаю, что именно не так, и как это исправить.

Как мне изменить свой код, чтобы правильно загрузить страницу PHP?

Спасибо заранее за вашу помощь.

Related of "Обновите страницу php после загрузки файла"

«Заголовки уже отправлены» означает, что ваш PHP-скрипт уже отправил заголовки HTTP, и поэтому он не может вносить в них изменения.

Убедитесь, что вы не отправляете ЛЮБОЙ контент перед вызовом session_start . Еще лучше, просто сделайте session_start первое, что вы делаете в своем PHP-файле (так что поставьте его в абсолютном начале, перед всем HTML и т. Д.).

Используйте это сверху только после <?php

 ob_start(); 

вы можете использовать вот так:

 <?php ob_start(); session_start(); include 'your php file'; ... ... 

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

 <script> function myFunction() { location.reload(); } </script> 

Это перезагрузит текущую страницу.

Если вы хотите обновить страницу на стороне сервера: в простой php вы можете использовать функцию заголовка ( http://php.net/manual/ru/function.header.php ) для обновления текущей страницы.

 header('Location: /'.$_SERVER["REQUEST_URI"]); 

если вы хотите обновить страницу со стороны клиента, вы можете использовать:

 location.reload() 

(JavaScript)

Появляется только страница с белым backgroung, показывающим: Файл file.data загружен.

Это ваш код, который делает это:

 if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } ob_end_flush(); include("fileform.php"); 

Причина, по которой вы впоследствии получаете сообщение об ошибке, заключается в том, что вы должны вызывать session_start () где-то после ob_end_flush (), но это не отображается ни в одном из кода, который вы нам показали. т.е. код, который вы нам показали, не приведет к ошибке, которую вы указали.

По совпадению, несмотря на то, что код выше наносится ob_end_flush () (без видимой причины), нет ob_start (). Это может появиться в коде, который вы нам не показали.

Вы можете перезагрузить одну и ту же страницу, перенаправив ее на тот же URL.

 <?php redirect(your_url); ?> 

Я делаю что-то не так в файле upload.php, но я не знаю, что именно не так

Проблема, с которой вы сталкиваетесь, – это классика.

В скрипте fileform.php вы вызываете session_start() (через login.php ). Это не работает после загрузки файла, потому что в сценарии загрузки, который вы написали в тело ответа HTTP через echo :

session_start() должен писать заголовки HTTP. поскольку заголовки уже отправлены session_start() не могут выполнять свою работу.

Именно это сообщение об ошибке пытается сказать:

Предупреждение: session_start () [function.session-start]: не удается отправить ограничитель кеша сеанса – уже отправленные заголовки (вывод запущен на /var/www/upload.php:40) в /var/www/login.php в строке 4

как это исправить

Вам необходимо будет реорганизовать сценарий загрузки, чтобы вы include('fileform.php') перед отправкой любого другого содержимого в тело ответа.

 <?php // .. do not echo anything include('fileform.php'); // .. do the file upload stuff. в <?php // .. do not echo anything include('fileform.php'); // .. do the file upload stuff. 

Примечание: если вы попытаетесь перенаправить после echo вы столкнетесь с той же проблемой, что и session_start() поскольку перенаправление HTTP требует записи заголовков ответов.