У меня была эта рабочая загрузка файла, которая перестала работать, так как я изменил веб-хостинг, хотя я ничего не изменил.Загрузка файла перестала работать
Я проверил, что мне разрешено загружать файлы, а максимальный размер файла - 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);
ошибка # 1 и хуже: вы никогда не беспокоиться о его проверке успешной загрузки, вы просто не берут на себя ничего мог когда-либо терпеть неудачу и промахнуться вперед. Параметр '['error']' в $ _FILES по какой-то причине - это должно быть ** FIRST ** вещь, которую вы проверяете, прежде чем делать что-либо еще с загруженным материалом. –
@MarcB OK хорошая точка .. но $ _FILES is null .. так что я не смогу получить эту ошибку – DTH