Проблема с PHP (работает на localhost, но ошибки на веб-сервере)

#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. эй, спасибо за эти предложения, сейчас попробую внедрить их в скрипт, разделение имен файлов выглядит намного проще, чем весь лишний код, который у меня был, еще раз спасибо