2015-11-24 2 views
0

У меня была эта рабочая загрузка файла, которая перестала работать, так как я изменил веб-хостинг, хотя я ничего не изменил.Загрузка файла перестала работать

Я проверил, что мне разрешено загружать файлы, а максимальный размер файла - 256 МБ, поэтому проблемы там нет. Кроме того каталоги им Выгрузка иметь набор CHMOD 777.

PHP версии 5.6.15

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

Heres мой код клиента:

error_reporting(E_ALL); 

$uploaddir = 'tempUploads/'; 
$random_file_name = uniqid(rand(), true); 
$file_extension = pathinfo(basename($_FILES['fileToUpload']['name']), PATHINFO_EXTENSION); 
$uploadfile = $uploaddir . basename($_FILES['fileToUpload']['name']); 
$optional_id = $_POST['optional_id']; 
$upload_type = $_POST['upload_type']; 

if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $uploadfile)) 
{ 
    $ch = curl_init(); 

    $filepath = str_replace('\\', '/', realpath(dirname(__FILE__))) . "/"; 
    $target_path = $filepath . $uploadfile; 
    var_dump(file_exists($target_path)); 
    $data = array('optional_id' => $optional_id, 'file' => '@'.$target_path, 'upload_type' => $upload_type);  

    curl_setopt($ch, CURLOPT_URL, 'http://domain.dk/webservice/v1/uploadFile'); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    $curl_response = curl_exec($ch); 

    if ($curl_response === false) 
    { 
     $info = curl_getinfo($curl); 
     curl_close($curl); 
     die('error occured during curl exec. Additioanl info: ' . var_export($info)); 
    } 
} 
else 
{ 
    echo "Kunne ikke uploade filen"; 
} 

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

Моя сервисная функция выглядит следующим образом:

$app->post('/uploadFile', 'authenticate', function() use ($app) 
{ 
$optional_id = $app->request->post('optional_id'); 
$upload_type = $app->request->post('upload_type'); 
$file = $app->request->post('file'); 
$uploaddir = ""; 
// set directory where file needs to be saved 
switch($upload_type) 
{ 
    case 1: 
     $uploaddir = '../uploadedContent/calibrationCertificate/'; 
     break; 
    case 2: 
     $uploaddir = '../uploadedContent/educationCertificate/'; 
     break; 
    default:    
} 


// random file name to avoid overwriting existing files. 
$random_file_name = uniqid(rand(), true); 
// extension of the file 
$file_extension = pathinfo(basename($_FILES['file']['name']), PATHINFO_EXTENSION); 
// full path and name 
$uploadfile = $uploaddir . $random_file_name.".".$file_extension; 


if(move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) 
{ 
    $db = new DbHandler(); 

    switch($upload_type) 
    { 
     case 1: 
      $db->insertEquipmentDocumentRef($optional_id,$uploadfile,basename($_FILES['file']['name']));  
      break; 
     case 2: 
      $db->insertEducationDocumentRef($optional_id,$uploadfile,basename($_FILES['file']['name'])); 
      break; 
     default:    
    } 

    $response["error"] = false; 
    $response["message"] = "filen blev uploadet"; 
    $response["optional_id"] = $optional_id; 
    $response["upload_type"] = $upload_type; 
    $response["uploadfile"] = $file; 
} 
else 
{ 
    $response["error"] = false; 
    $response["message"] = "filen kunne ikke uploades"; 
    $response["dir"] = $uploadfile; 
    $response["dir"] = $uploadfile; 
    $response["move from"] = pathinfo(basename($_FILES['file']['name'])); 
    if(!$_FILES) 
    { 
     $response["file"] = "File does not exist"; 
    } 

} 

echoRespnse(201, $response); 

}); 

Опять же, вы должны заметить, что я сделал чек, если $ _FILES является недействительным в нижней части кода после того, как move_uploaded_files не удалось. Проверка в моем отладчике браузера показывает, что $ _FILES имеет значение NULL.

Как получить переменную $ _FILES в значение null? .. он работает гладко, прежде чем я изменил ... хостинга

Единственное место, где я полагал, что может быть ошибка, когда я «релейный» файл в службу через массив postfields, но им не уверен:

$data = array('optional_id' => $optional_id, 'file' => '@'.$target_path, 'upload_type' => $upload_type); 
+2

ошибка # 1 и хуже: вы никогда не беспокоиться о его проверке успешной загрузки, вы просто не берут на себя ничего мог когда-либо терпеть неудачу и промахнуться вперед. Параметр '['error']' в $ _FILES по какой-то причине - это должно быть ** FIRST ** вещь, которую вы проверяете, прежде чем делать что-либо еще с загруженным материалом. –

+0

@MarcB OK хорошая точка .. но $ _FILES is null .. так что я не смогу получить эту ошибку – DTH

ответ

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