#php #html
#php #HTML
Вопрос:
у меня возникли некоторые проблемы с PHP на веб-сервере, который я использую. Я уверен, что ответ очевиден, но по какой-то причине он полностью ускользает от меня.
У меня есть php-файл, который загружает два файла, снимок клиента до и после. Скрипт на моем сервере (localhost) работает нормально, он загружает файлы, переименовывает файлы в метку времени и помещает изображения в папки для дальнейшей сортировки другим скриптом.
Тем не менее, когда я загружаю его на веб-сервер, и некоторые файлы работают (т. е mel.jpg, test.jpg ) но файлы, подобные IMG_0042.jpg не работает, я уверен, что ответ — это что-то простое, но полностью ускользает от меня.
Я думаю, что подчеркивание может иметь к этому какое-то отношение, но ни за что на свете не могу в этом разобраться, любая помощь с благодарностью, большое спасибо.
<?php
if(!isset($_COOKIE['auth'])) {
header("Location: login12.php");
exit();
}
$page_title="test";
include('header.html');
// Upload and Rename File
if (isset($_POST['submitted'])) {
$filenamebef = $_FILES["uploadbef"]["name"];
$filenameaft = $_FILES["uploadaft"]["name"];
$file_basename_bef = substr($filenamebef, 0, strripos($filenamebef, '.'));
$file_basename_aft = substr($filenameaft, 0, strripos($filenameaft, '.'));
// get file extention
$file_ext_bef = substr($filenamebef, strripos($filenamebef, '.'));
$file_ext_aft = substr($filenameaft, strripos($filenameaft, '.'));
// get file name
$filesize_bef = $_FILES["uploadbef"]["size"];
$filesize_aft = $_FILES["uploadaft"]["size"];
$allowed = array('image/pjpeg','image/jpeg','image/JPG','image/X-PNG','image/PNG','image /png','image/x-png');
if ((in_array($_FILES['uploadbef']['type'], $allowed)) amp;amp; in_array($_FILES['uploadaft']['type'], $allowed)) {
if (($filesize_bef < 200000) amp;amp; ($filesize_aft < 200000)){
// rename file
$date = date("mdy");
$time = date("His");
$timedate = $time . $date;
$newfilenamebef = $timedate . $file_ext_bef;
$newfilenameaft = $timedate . $file_ext_aft;
if ((file_exists("upload/images/before" . $newfilenamebef)) amp;amp; (file_exists("uploads/images/after" . $newfilenameaft))) {
// file already exists error
echo "You have already uloaded this file.";
} else {
move_uploaded_file($_FILES["uploadbef"]["tmp_name"], "uploads/images/before/" . $newfilenamebef) amp;amp; move_uploaded_file($_FILES["uploadaft"]["tmp_name"], "uploads/images/after/" . $newfilenameaft);
echo "File uploaded successfully.";
}
}
} elseif ((empty($file_basename_bef)) amp;amp; (empty($file_basename_aft))) {
// file selection error
echo "Please select a file to upload.";
} elseif (($filesize_bef > 200000) amp;amp; ($filesize_aft > 200000)) {
// file size error
echo "The file you are trying to upload is too large.";
} else {
// file type error
echo "Only these file typs are allowed for upload: " . implode(', ',$allowed);
unlink($_FILES["uploadbef"]["tmp_name"]);
unlink($_FILES["uploadaft"]["tmp_name"]);
}
}
echo $newfilenamebef;
echo $newfilenameaft;
?>
<form enctype="multipart/form-data" action="uploading.php" method="post">
<input type="hidden" value="MAX_FILE_SIZE" value="524288">
<fieldset>
<legend>Select a JPEG or PNG image of 512kb or smaller to be uploaded : </legend>
<p><b>Before</b> <input type="file" name="uploadbef" /></p>
<p><b>After</b> <input type="file" name="uploadaft" /></p>
</fieldset>
<div align="center"><input type="submit" name="submit" value="Submit" /></div>
<input type="hidden" name="submitted" value="TRUE" />
</form>
<?php
include('footer.html');
?>
Комментарии:
1. Если вы считаете, что проблема в подчеркивании, переименуйте этот файл без подчеркивания и повторите попытку — по крайней мере, тогда вы сможете проверить, так это или нет, чтобы помочь сузить проблему.
2. Что вы подразумеваете под «не работают»? Вы получаете сообщение об ошибке? В чем разница между этими файлами (за исключением имени файла)?
3. Проверьте max_upload_filesize и размер публикации на удаленном хостинге.
4. @AJ — Я собирался внести ту же самую правку 🙂 Рад, что я не единственный грамматический нацист здесь
5. боже мой, я нашел проблему, поэтому извините, что потратил ваше время, мой максимальный размер файла был установлен на 200 кб, в то время как файл был 356 кб, будет обновлен, поэтому для этого отображается ошибка, все еще очень новый для php
Ответ №1:
Вы должны, но эти две строки в верхней части вашего index.php или bootstrap.php :
error_reporting( -1 );
ini_set( "display_errors" , 1 );
И посмотрите, появляются ли какие-либо сообщения об ошибках.
Вполне возможно, что проблема вызвана неправильными правами доступа к файлам.
Комментарии:
1. 1 за предложение добавить в скрипт вместо php.ini (где о них часто забывают)
Ответ №2:
На первый взгляд я бы сказал, что ваш localhost не чувствителен к регистру, в то время как ваш веб-сервер чувствителен.
Другими словами, на вашем localhost IMG_12345.JPG то же самое, что img_12345.jpg . Однако на вашем веб-сервере они обрабатываются по-другому.
Без каких-либо фактических сообщений об ошибках трудно быть уверенным, но это распространенная проблема.
Комментарии:
1. привет, спасибо за быстрый ответ! Попробую это и посмотрю, как это работает,
Ответ №3:
Вы не проверяете правильность загрузки должным образом. Что-то вроде следующего было бы ГОРАЗДО надежнее:
// this value is ALWAYS present and doesn't depend on form fields
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$errmsgs = array();
if ($_FILES['uploadbef']['error'] !== UPLOAD_ERR_OK) {
$errs ;
$errmsgs[] = "'uploadebef' failed with code #" . $_FILES['uploadebef']['error'];
}
if ($_FILES['uploadaft']['error'] === UPLOAD_ERR_OK) {
$errs ;
$errmsgs[] = "'uploadeaft' failed wicode #" . $_FILES['uploadeaft']['error'];
}
if (count($errmsgs) > 0) {
print_r($errmsgs);
die();
}
... process the files here ...
}
Кроме того, зачем заново изобретать колесо для разделения имен файлов?
$parts = path_info($_FILES['uploadaft']['name']);
$basename = $parts['basename'];
$ext = $parts['extension'];
Комментарии:
1. эй, спасибо за эти предложения, сейчас попробую внедрить их в скрипт, разделение имен файлов выглядит намного проще, чем весь лишний код, который у меня был, еще раз спасибо