Я использую следующий код, и он успешно выгружает файлы на моем локальном компьютере. Он показывает «Успешно загружено» на моем локальном компьютере.
// Upload file
$moved = move_uploaded_file($_FILES["file"]["tmp_name"], "images/" . "myFile.txt" );
if( $moved ) {
echo "Successfully uploaded";
} else {
echo "Not uploaded";
}
Но когда Я использовал этот код на своем онлайн-сервере, тогда он не загружает файл, а просто показывает сообщение «Не загружено».
Как я могу узнать, в чем проблема, и как я могу отобразить реальную проблему для пользователя?
Убедитесь, что веб-сервер имеет разрешение на запись в каталог "images /"
Попробуйте следующее:
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/images/";
if (is_dir($upload_dir) && is_writable($upload_dir)) {
// do upload logic here
} else {
echo 'Upload directory is not writable, or does not exist.';
}
Это мгновенно отметит все ошибки разрешения файлов.
Как я могу узнать, в чем проблема
Легко. Обратитесь к журналу ошибок веб-сервера.
Как я могу заставить отобразить реальную проблему пользователю?
НИКОГДА не делайте этого.
Обычный пользователь ничего не поймет из этой ошибки.
Вредоносный пользователь не должен получить никакой обратной связи, особенно в виде очень информативного сообщения об ошибке.
Просто покажите страницу с оправданиями.
Если у вас нет доступа к журналу ошибок сервера, ваша задача усложняется.
Есть несколько способов получить доступ к сообщениям об ошибках.
Для вывода сообщений об ошибках на экран можно добавить эти строки в код
ini_set('display_errors',1);
error_reporting(E_ALL);
или сделать пользовательский лог-файл ошибок
ini_set('log_errors',1);
ini_set('error_log','/absolute/path/tp/log_file');
и есть еще несколько способов.
, но вы должны понимать, что без фактического сообщения об ошибке вы не сможете двигаться. Трудно быть слепым в темноте
Проверяете ли вы, что файл загружен правильно? Возможно, вы превысили max_post_size или max_upload_filesize. При входе в систему с помощью FileZilla вы копируете файлы так же, как и вы, при загрузке с помощью PHP этот файл принадлежит пользователю, который запускает apache (например, www-data), попробуйте поставить chmod 755 для изображений.