2013-08-21 6 views
0

Я хочу написать загрузчик PHP, который сохраняет файлы на моем FTP.Загрузка файла PHP без сохранения файла

Я нашел этот сценарий:

<?php 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/pjpeg") 
|| ($_FILES["file"]["type"] == "image/x-png") 
|| ($_FILES["file"]["type"] == "image/png")) 
&& ($_FILES["file"]["size"] < 20000) 
&& in_array($extension, $allowedExts)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 

    if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 
?> 

я добавил от 0 до максимального значения размера файла, потому что я хотел проверить с 160KB изображением.

Все работает нормально. Он даже говорит:

Upload: bier15291.jpg 
Type: image/jpeg 
Size: 158.26171875 kB 
Temp file: /mnt/shared/tmp/php_0aOep 
Stored in: upload/bier15291.jpg 

Но я не могу найти файл на своем FTP.

Что я делаю неправильно?

+1

И вы _absolutely_ уверены, что есть права на запись в каталог 'upload /'? – davidkonrad

+0

Так этот вопрос разрешен тогда? Если это так, вы должны выбрать ответ или добавить его самостоятельно и выбрать его. – Technoh

ответ

0

Таким образом, решение было установить разрешения 0775 ...

1

Проверьте обратное значение файла move_uploaded_file. Если либо имя файла не является допустимым файлом загрузки, либо что-то не так с перемещением содержимого файла, move_uploaded_file вернет false.

+0

Код работает просто отлично. Когда я тестирую его, он загружает файлы, как ожидалось, _after_ Я обеспечил права на запись и изменил '$ _FILES [" file "] [" size "] <20000)' на более нормальное/большее значение :-) – davidkonrad

0

Взгляните на это: http://www.php.net/manual/en/features.file-upload.errors.php Вам нужна обработка ошибок в момент вашей попытке переместить файл, поскольку в настоящее время вы только проверить IF $_FILES["file"]["error"] > 0, прежде чем вы на самом деле пытаетесь переместить файл.

Таким образом, ваш код только подтверждает, что перед тем, как переместить его, нет ошибок в временном файле.

Рассмотрим эти заявления http://www.php.net/manual/en/function.move-uploaded-file.php

Если имя файла не является допустимым загруженным файлом, то не будет происходить никаких действий, и move_uploaded_file() возвращает FALSE.

Если имя файла является допустимым файлом загрузки, но не может быть перемещено для причины , никаких действий не будет, и move_uploaded_file() вернет FALSE. Кроме того, выдается предупреждение.

Так вы право проверки временный файл все в порядке, и нет ошибок, прежде чем работать с ним, но вы также должны поймать ошибки из функции move_upload_file(), чтобы убедиться, что этот шаг был ИСТИНА или ЛОЖЬ.

ли что-то подобное (я только изменил свой код, чтобы добавить IF вокруг move_uploaded_file())

if (file_exists("upload/" . $_FILES["file"]["name"])) 
    { 
     echo $_FILES["file"]["name"] . " already exists. "; 
    } 
    else 
    { 
     if (move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"])) 
     { 
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
     else 
     { 
      //output the errors here (ie using $_FILES["file"]["error"]) 
     } 
     } 

Затем массив ошибок должен вывести, что происходит неправильно. Т.е. (вероятно) UPLOAD_ERR_CANT_WRITE. Затем это укажет вам на проблему, а также будет хорошо иметь в вашем коде в любом случае, так что ваш сценарий будет изящным, а не просто ничего не произойдет (никогда не должно быть сценария, где ничего не происходит!)

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