PHP问题(在本地主机上工作,但在web服务器上出错)

PHP问题(在本地主机上工作,但在web服务器上出错),php,html,Php,Html,我在使用的Web服务器上使用PHP时遇到一些问题。 我相信答案是显而易见的,但出于某种原因,我完全无法回答 我有一个php文件,它上载了两个文件,一个是客户端的前后快照。 我的服务器(localhost)上的脚本工作正常,它上载文件,将文件重命名为时间戳,并将图像放入这些文件夹中,以便由另一个脚本进行进一步排序 然而,当我把它上传到Web服务器上,一些文件可以工作(如mel.jpg,test.jpg),但像IMG_0042.jpg这样的文件不工作时,我确信答案很简单,但我完全找不到 我想下划线可

我在使用的Web服务器上使用PHP时遇到一些问题。 我相信答案是显而易见的,但出于某种原因,我完全无法回答

我有一个php文件,它上载了两个文件,一个是客户端的前后快照。 我的服务器(localhost)上的脚本工作正常,它上载文件,将文件重命名为时间戳,并将图像放入这些文件夹中,以便由另一个脚本进行进一步排序

然而,当我把它上传到Web服务器上,一些文件可以工作(如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)) && in_array($_FILES['uploadaft']['type'], $allowed)) {       

        if (($filesize_bef < 200000) && ($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)) && (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) && move_uploaded_file($_FILES["uploadaft"]["tmp_name"], "uploads/images/after/" . $newfilenameaft);
                echo "File uploaded successfully."; 

            }
        }

    } elseif ((empty($file_basename_bef)) && (empty($file_basename_aft))) { 
        // file selection error
        echo "Please select a file to upload.";     
    } elseif (($filesize_bef > 200000) && ($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');
?>

选择要上载的512kb或更小的JPEG或PNG图像:
以前

之后


您应该在index.php或bootstrap.php顶部添加以下两行:

error_reporting( -1 );
ini_set( "display_errors" , 1 );
并查看是否出现一些错误消息


问题很可能是由错误的文件权限引起的。

您应该在index.php或bootstrap.php顶部的以下两行:

error_reporting( -1 );
ini_set( "display_errors" , 1 );
并查看是否出现一些错误消息


这个问题很可能是由错误的文件权限引起的。

快速猜一猜,您的本地主机不区分大小写,而您的Web服务器区分大小写

换句话说,在本地主机上,IMG_12345.JPG与IMG_12345.JPG相同。不过,在您的Web服务器上,它们的处理方式不同


如果没有任何实际报告的错误,很难确定,但这是一个常见的问题。

快速猜一猜,我会说您的本地主机不区分大小写,而您的Web服务器区分大小写

换句话说,在本地主机上,IMG_12345.JPG与IMG_12345.JPG相同。不过,在您的Web服务器上,它们的处理方式不同


如果没有任何实际报告的错误,很难确定,但这是一个常见问题。

您没有正确检查有效的上载。类似于以下内容的内容更可靠:

// 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'];

您没有正确检查有效的上载。类似于以下内容的内容更可靠:

// 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'];

如果您认为下划线是问题所在,请在不使用下划线的情况下重命名该文件,然后再试一次-至少这样您可以验证它是否有助于缩小问题的范围。您所说的“不工作”是什么意思?你收到错误信息了吗?这些文件(文件名除外)之间有什么区别?检查远程主机上的最大上载文件大小和post大小。@AJ-我正要进行相同的编辑:)很高兴我不是这里唯一的语法纳粹哦,天哪,我发现了问题,很抱歉浪费您的时间,我的最大文件大小设置为200kb,而文件大小为356kb,将更新以显示此错误,对phpIf来说仍然是非常新的如果您认为下划线是问题所在,请在不使用下划线的情况下重命名该文件,然后重试-至少您可以验证它是否有助于缩小问题的范围。您所说的“不工作”是什么意思?你收到错误信息了吗?这些文件(文件名除外)之间有什么区别?检查远程主机上的最大上载文件大小和post大小。@AJ-我正要进行相同的编辑:)很高兴我不是这里唯一的语法纳粹哦,天哪,我发现了问题,很抱歉浪费您的时间,我的最大文件大小设置为200kb,而文件大小为356kb,将会更新,因此会显示一个错误,php+1建议添加到脚本而不是php.ini(他们经常被忘记)+1建议添加到脚本而不是php.ini(他们经常被忘记)嘿,感谢您的快速回复!我会试试看,嘿,谢谢你的快速回复!我会试试看,嘿,谢谢你的建议,现在我会尝试在脚本中实现它们,文件名的拆分看起来比我所有多余的代码都要容易,再次感谢你的建议,我会尝试在脚本中实现它们,文件名的拆分看起来比我所有多余的代码都简单,再次感谢