2014-12-21 3 views
0

Я новичок в PHP и пытаюсь создать страницу для загрузки файла jpeg. Кажется, что веб-страница работает нормально, и кажется, что файл загружается, однако файл не отображается на сервере. Любая помощь, которую вы можете предоставить, будет отличной.Загрузка файла не работает в PHP

Код РНР:

<?php 
    $target_dir="/var/www/html/"; 
    $fileName=$_FILES['file']['name']; 
    $target_file=$target_dir . basename($fileName); 
    $imageFileType=pathinfo($target_file,PATHINFO_EXTENSION); 
    $fileTempName=$_FILES["file"]["tmp_name"]; 
    $fileType=$_FILES["file"]["type"]; 
    $fileSize=$_FILES["file"]["size"]; 
    $fileError=$_FILES["file"]["error"]; 
    if(($fileType=="image/jpeg")&&($fileSize<100000)){ 
      if($fileError>0){ 
        echo "Return Code: " . $fileError . "<br />"; 
      } 
      else{ 
        echo "Upload: " .$fileName . "<br />"; 
        echo "Type: " . $fileType . "<br />"; 
        echo "Size: " . ($fileSize/1024) . " kb<br />"; 
        echo "Temp file: " . $fileTempName . "<br />"; 
      if (file_exists($fileName)){ 
        unlink($fileName); 
      } 
      move_uploaded_file($fileTempName,$target_file); 
      echo "<br><br>File Temp Name: " .$fileTempName."\r\n <br>"; 
      echo "Uploaded file stored as : " .$target_file ."<br><br>"; 
      }  
    } 
    else{ 
      echo "File is not a JPEG or too big."; 
    } 
?> 

И HTML код выглядит следующим образом:

<html> 
     <body> 
     <form action="save2web.php" method="post" enctype="multipart/form-data"> 
     <label for="file">Filename:</label> 
     <input type="file" name="file" id="file"/> 
     <br/> 
     <input type="submit" name="submit" value="Upload"/> 
     </form> 
     </body> 
     </html> 
+0

Любые ошибки или другие вещи, которые могут быть полезны для нас? – simeg

+0

Ошибок и комментариев не обнаружено вообще. На самом деле на веб-странице все это кажется нормальным: – avtar

+0

Веб-страница показывает: Выгрузка: screen568x568.jpeg Тип: IMAGE/JPEG Размер: 25,4140625 кб файл Temp:/TMP/phpYjEfFQ файла Temp Имя:/TMP/phpYjEfFQ Загруженный файл, хранящийся как: /var/www/html/screen568x568.jpeg – avtar

ответ

0

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

+0

Я попытался выполнить некоторые инструкции в Интернете, чтобы сделать это, и, казалось, загрузил один файл, поэтому решил, что он решил проблему. Однако эта же проблема началась снова. Не могли бы вы дать некоторые инструкции о том, как вы изменили разрешения? – avtar

+2

Филипп Клегг, это нормально Мне удалось изменить разрешение - вы были правы. Как только я сделал это, файлы загрузились без проблем. – avtar

+0

@avtar Вы должны действительно согласиться с его ответом, затем – Yang

1

Проблема заключается в том, что вы не проверять возвращаемое значение move_uploaded_file() вообще. Но, похоже, вы запускаете свой скрипт на хосте , и поскольку большинство хостов запрещают относительные пути, вам лучше предоставить абсолютное значение.

Так что попробуйте, замена:

$target_dir = "/var/www/html/"; // <- This is relative, which might be blocked due to security reasons 

с

$target_dir = dirname(__FILE__) . "/var/www/html/"; // dirname(__FILE__) is a path to root 

И затем, чтобы убедиться, что файл был загружен:

if (!move_uploaded_file(...)) { 
    // error 
} 
+0

Я внес изменения, как вы и предложили, однако та же проблема ... Но с проверкой ошибки я могу видеть, что файл не загружается. – avtar

+0

попробуйте 'var_dump (is_dir ($ target_dir))' и 'var_dump (is_file ($ target_file))' ... что они говорят? – Yang

+0

target_dir = true и target_file = false – avtar

0

Измените свой целевой каталог, как это. Добавьте a. (Точка) перед именем каталога.

$target_directory = './var/www/html'; 
+0

Объясните, почему он должен изменить его и в чем его смысл – Yang

+0

Если файл savetoweb.php и папка var находятся в одном каталоге, чтобы это можно было сработать, потому что один (точка) начинался с текущий каталог, в котором размещен и выполняется сценарий. –

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