как убрать предупреждение заголовка - PullRequest
0 голосов
/ 07 января 2012

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

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с C: \ XAMP \ xampp \ htdocs \ gallery \ uploader3.php: 25) в C: \ XAMP \ xampp \htdocs \ gallery \ 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>

как я могу решить эту проблему?Спасибо ВПЕРЕДИ!: D

Ответы [ 4 ]

1 голос
/ 07 января 2012

Ваш поток кода неправильный. Ваш 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 голос
/ 07 января 2012

СОВЕТЫ: ​​

  • написать ob_start() вверху страницы

  • напишите exit() сразу после header()

0 голосов
/ 07 января 2012

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

0 голосов
/ 07 января 2012

Ошибка означает, что некоторая функция, отправляющая заголовок (header('location'), session_start и т. Д.), Не может этого сделать, поскольку она уже отправлена.

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

  • , пробел перед вашим открывающим тегом: это вывод, поэтому он получает send (с заголовками)
  • Связка HTML перед тем, как запустить PHP (например, session_start))

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

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

...