2016-11-02 2 views
1

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

«foo.jpg»

, но когда я передать данные на мой PHP скрипт, он дает мне ошибку

"Предупреждение getimagesize() filename не может быть пустым .... Извините, произошла ошибка Ошибка загрузки вашего файла."

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

HTML:

<!DOCTYPE html> 
<html> 
<body> 

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input type="file" capture="camera" accept="image/*" name="imageFileToUpload"> 
    <label for="rma">RMA: </label> 
    <input type="text" name="rma"> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 

</body> 
</html> 

PHP:

<?php 
$rma = $_POST['rma']; 
echo "RMA: " . $rma. "<br>"; 
$target_dir = "uploads/". $rma; 

if (file_exists($target_dir)==false) 
{ 
    if(mkdir ($target_dir)) 
    { 
     echo "folder created at: " .$target_dir . "<br>"; 
    } 
    else 
    { 
     echo "failed to create folder " . $target_dir. "<br>"; 
    } 
} 

$target_file = $target_dir ."/" .basename($_FILES["imageFileToUpload"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 

if(isset($_POST["submit"])) 
{ 
    $check = getimagesize($_FILES["imageFileToUpload"]["tmp_name"]); 
    if($check !== false) 
    { 
      //echo "File is an image - " . $check["mime"] . "."; 
      $uploadOk = 1; 
    } 

    else 
    { 
     echo "File is not an image.<br>"; 
      $uploadOk = 0; 
    } 

    // Check if file already exists 
    if (file_exists($target_file)) 
    { 
     echo "Sorry, file already exists.<br>"; 
     $uploadOk = 0; 
    } 

    // if everything is ok, try to upload file 
    else 
    { 
     if (move_uploaded_file($_FILES["imageFileToUpload"]["tmp_name"], $target_file)) 
     { 
      echo "The file ". basename($_FILES["imageFileToUpload"]["name"]). " has been uploaded.<br>"; 
     } 

     else 
     { 
      echo "Sorry, there was an error uploading your file."; 
     } 
    } 
} 

?> 

Я хотел бы поблагодарить всех за их любезное и терпеливой помощи до сих пор, и я признателен за любые ответы и рекомендации.


UPDATE:

Я использую Ipad с Safari, а также андроид устройства под управлением 6.0.1 Зефир и хром браузер. Файл дампа показал некоторую информацию.

Здесь эхо от IPad:

RMA: 2468 
C:\wamp64\www\upload.php:5: 
array (size=5) 
    'name' => string 'image.jpg' (length=9) 
    'type' => string '' (length=0) 
    'tmp_name' => string '' (length=0) 
    'error' => int 1 
    'size' => int 0 
folder created at: uploads/2468 

(!) Warning: getimagesize(): Filename cannot be empty in C:\wamp64\www\upload.php on line 31 
Call Stack 
# Time Memory Function Location 
1 0.0006 376976 {main}() ...\upload.php:0 
2 0.0011 377176 createImageFile() ...\upload.php:20 
3 0.0012 377208 getimagesize () ...\upload.php:31 
File is not an image. 
Sorry, there was an error uploading your file. 

Android 6.0.1 хром:

RMA: 1996 
C:\wamp64\www\upload.php:5: 
array (size=5) 
    'name' => string '20160322_125659.jpg' (length=19) 
    'type' => string '' (length=0) 
    'tmp_name' => string '' (length=0) 
    'error' => int 1 
    'size' => int 0 
folder created at: uploads/1996 

(!) Warning: getimagesize(): Filename cannot be empty in C:\wamp64\www\upload.php on line 30 
Call Stack 
# Time Memory Function Location 
1 0.0006 377880 {main}() ...\upload.php:0 
2 0.0012 378096 createImageFile() ...\upload.php:20 
3 0.0012 378128 getimagesize () ...\upload.php:30 
File is not an image. 
Sorry, there was an error uploading your file. 

Рабочего эхо от компьютера:

RMA: 1234 
C:\wamp64\www\upload.php:5: 
array (size=5) 
    'name' => string '58832_300x300.jpg' (length=17) 
    'type' => string 'image/jpeg' (length=10) 
    'tmp_name' => string 'C:\wamp64\tmp\phpF5F3.tmp' (length=25) 
    'error' => int 0 
    'size' => int 3801 
The file 58832_300x300.jpg has been uploaded. 
New record created successfully 

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

+0

Спасибо за загол Фред, я не был полностью уверен в лучшая фразировка. – mberna

+2

Вы пытались сбросить '$ _FILES [" imageFileToUpload "]'? есть ли там набор данных? и второстепенный, какой os на вашем телефоне? – Armen

+1

Привет! Кажется, это проблема CORS. При попытке загрузить из другого места произошла ошибка. Для получения подробной информации об ошибке см. Файл журнала вашего сервера Wamp. –

ответ

1

Кажется, проблема CORS.

При попытке загрузить из другого местоположения произошла ошибка.

См файл вашего WAMP сервер для информации об ошибке необходимо войти Детальную ...

Для получения дополнительной информации о том механизме, см: CORS wiki

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