2012-01-07 1 views
-1

мой код должен перейти на следующую страницу после успешной загрузки, но у меня есть это предупреждение. 'как удалить предупреждение заголовка

Предупреждение: Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в C: \ XAMP \ XAMPP \ HTDOCS \ галерея \ uploader3.php: 25) в C: \ XAMP \ XAMPP \ HTDOCS \ галерея \ uploader3.php на линии 51

вот код:

<html> 
<head> 
<title> Sample1 - File Upload on Directory </title> 
</head> 
<body> 
<div align="center"> 
<form action="uploader3.php" method="post" enctype="multipart/form-data" > 
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
     Create an Album (limited to 10 images): <br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <br /> 
    <input type="submit" value="Upload File" /> 
</form> 
</div> 

<?php 
$target_path = "uploads1/"; 
if(!file_exists($target_path)) 
{ 
    if(!mkdir($target_path)) 
    { 
     die ("could not create the folder"); 
    } 
} 
else 
{ 
    for($count = 0; $count < count($_FILES['uploadedfile']); $count++) 
     { 
      $target_path = $target_path . basename($_FILES['uploadedfile']['name'][$count]); 

      if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$count], $target_path)) 
      { 
       /*echo "The file ". basename($_FILES['uploadedfile']['name'][$count]). 
      " has been uploaded";*/ 
      } 
      else 
      { 
      echo "There was an error uploading the file, please try again!"; 
      } 
     } 
} 
header('Location: index.html'); 
?> 
</body> 
</html> 

как я могу решить эту проблему? Спасибо AHEAD! : D

+0

прошу проголосовать за мое сообщение .. im new in php .. :( – SimonCode

+0

Вам ... нужно переосмыслить поток вашего кода. –

+0

Возможный дубликат [Заголовки уже отправлены PHP] (http://stackoverflow.com/questions/8028957/headers-already-sent-by-php) – Jocelyn

ответ

1

Ваш код не соответствует действительности. Ваш скрипт php выполняется, как только эта страница загружается, а не когда пользователь отправляет форму.

Вам нужно переместить код, который находится между <?php ?> (включая те теги), на uploader3.php, как и где целевое действие формы установлен в.

В качестве альтернативы вы можете поместить скрипт в начало страницы и проверить, что данные формы были отправлены, и удалить атрибут действия из тега формы, чтобы он просто возвращался к себе или менял его, чтобы он указывал на сама

Пример

<?php 

//Check that you have some post data 
if(isset($_POST['submit'])) 
{ 
    $target_path = "uploads1/"; 
    if(!file_exists($target_path)) 
    { 
     if(!mkdir($target_path)) 
     { 
      die ("could not create the folder"); 
     } 
    } 
    else 
    { 
     for($count = 0; $count < count($_FILES['uploadedfile']); $count++) 
      { 
       $target_path = $target_path . basename($_FILES['uploadedfile']['name'][$count]); 

       if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'][$count], $target_path)) 
       { 
        /*echo "The file ". basename($_FILES['uploadedfile']['name'][$count]). 
       " has been uploaded";*/ 
       } 
       else 
       { 
       echo "There was an error uploading the file, please try again!"; 
       } 
      } 
    } 
    header('Location: index.html'); 

} 
?> 

<html> 
<head> 
<title> Sample1 - File Upload on Directory </title> 
</head> 
<body> 
<div align="center"> 
<form method="post" enctype="multipart/form-data" > 
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
     Create an Album (limited to 10 images): <br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <input type="file" name="uploadedfile[]" /><br /> 
    <br /> 
    <input type="submit" name="submit" value="Upload File" /> 
</form> 
</div> 
</body> 
</html> 
1

СОВЕТЫ: ​​

  • записи ob_start() в верхней части страницы

  • записи exit() только после того, как header()

+1

OB не исправит фундаментальные архитектурные недостатки кода. –

+0

вот почему я сказал, что это «СОВЕТЫ» не «решение» – diEcho

+0

Зачем отвечать тем, что не является решением? – Repox

0

Погрешность означает, что некоторая функция, которая посылает заголовок (a header('location'), session_start и т. д.) не может этого сделать, потому что он уже отправлен.

В большинстве случаев это связано с тем, что вы неявно отправляете заголовки, если начинаете выводить данные. Общие ошибки

  • пробельные перед ofyour открывающим тегом: это выход, так получает отправить (с заголовками)
  • Куча HTML, прежде чем начать свой PHP (как session_start)

Просто найдите строку, о которой говорит предупреждение, проверьте, какая функция вызывается, и убедитесь, что вы хотите эту функцию там, и если она отправляет заголовки, убедитесь, что вы раньше не отправляли данные.

Теперь вы можете, как @diEcho предложить, использовать выходную буферизацию, чтобы исправить это, но я не думаю, что вы захотите этого во всех случаях. (Я бы скорее подумал, что в большинстве случаев это не нужно).

-1

Запись OB_START в самом начале. Это приведет к удалению предупреждения, но ваш код не подходит для перенаправления на вторую страницу.

+0

это фактически дало бы конечному пользователю пустую страницу, никогда не показывающую форму, если поставить ее в начале, поскольку в браузер ничего не помещается –

 Смежные вопросы

  • Нет связанных вопросов^_^