2011-05-06 83 views
0

我在使用的网络服务器上遇到了一些PHP问题。 我相信答案是显而易见的,但由于某种原因,它完全避开了我。PHP的问题(适用于本地主机,但在网络服务器上出现错误)

我有一个php文件,上传两个文件,一个之前和之后的客户端镜头。 我的服务器(本地主机)上的脚本工作正常,它上传文件,将文件重命名为时间戳,并将图像放入文件夹以供其他脚本进一步排序。但是,当我上传到网络服务器,并且一些文件(例如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'); 
?> 
+0

如果您认为下划线是问题,请将该文件重命名为不带下划线并重试 - 至少可以验证是否有助于缩小问题范围。 – Dave 2011-05-06 14:38:57

+1

“不要工作”是什么意思?你有错误信息吗?这些文件有什么区别(文件名除外)? – Ikke 2011-05-06 14:39:23

+0

检查max_upload_filesize,并在远程主机上发布大小。 – Damien 2011-05-06 14:39:57

回答

3

你应该,但这两线在你的index.php或bootstrap.php中的顶部:

error_reporting(-1); 
ini_set("display_errors" , 1); 

看看是否有些错误信息转起来。

这很可能是由于错误的文件权限造成的。

+0

+1建议添加到脚本,而不是php.ini(他们经常被遗忘的地方) – 2011-05-06 14:42:23

1

在一个快速猜测我会说你的localhost不区分大小写,而你的web服务器是。

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

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

+0

嘿,谢谢你的快速回复!将尝试,看看它是怎么回事, – Nik 2011-05-06 14:47:18

0

您没有正确检查有效的上传。类似以下内容的将是FAR更可靠:

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

嘿感谢这些建议,将现在尝试和实施它们到脚本中,文件名的拆分看起来更容易,然后我所有的多余的代码,再次感谢 – Nik 2011-05-06 14:54:37

相关问题