2011-08-24 86 views
0

我当前的代码(不工作):问题与上传文件用PHP

<label for="homepage"><h3>Home Page Image</h3></label><input type="hidden" name="MAX_FILE_SIZE" value="300000" /><input type="file" name="homepage" /> 
     <?php 
      $tmp_name = $_FILES['homepage']['tmp_name']; 
      $file_type= $_FILES['homepage']['type']; 
      $name = strtolower($_POST['title']) . ".png"; 
      $upload_dir = "/slideshow/"; 
      $file_path = "$upload_dir/$name"; 
      list($width, $height, $type, $attr)=getimagesize("$tmp_name"); 

      if(isset($_POST['submit']) && $file_type == "image/png" && $width==800 && $height==250) 
      { 
       move_uploaded_file($tmp_name, "$upload_dir/$name"); 
      } 
      elseif((isset($_POST['submit']) && ($file_type != "image/png" || $width!=800 || $height!=250))) 
      { 
       echo "<div class=\"errorcheck\">Please select an image that meets the requirements. </div>"; 
       echo "$width $height $type"; 
      } 
     ?> 
</br> 

返回“警告:move_uploaded_file(幻灯片/ test.png)function.move上传文件]:未能打开流:权限在第93行的/home/xxx/xxx/back_end/add.php中被拒绝警告:move_uploaded_file()[function.move-uploaded-file]:无法将'/ tmp/phpGXQv9g'移动到'slideshow/test.png 'in /home/xxx/xxx/back_end/add.php on line 93“

我是初学者,所以请以简单的方式解释谢谢。

+0

是否有'

'标签潜伏在某处? –

回答

0

你几乎没有错误处理,请按照php.net的建议:

http://www.php.net/manual/en/features.file-upload.post-method.php

首先,调试至少打印出$_FILES array:

echo 'Here is some more debugging info:'; 
print_r($_FILES); 
+0

它返回:Array([name] => [type] => [tmp_name] => [error] => 4 [size] => 0) – Callum

+0

@Callum您的HTML错了,它没有提交文件: [4 =没有文件](http://php.net/manual/en/features.file-upload.errors.php)。 –

+0

你能在上面看到我出错的地方,因为我看不到任何东西吗? – Callum

0

这里的问题(我认为)是您引用$ tmp_name变量的方式。

它不应该用双引号。或者,它应该是这样的

...getimagesize("${tmp_name}"); 
+0

这是真的,虽然它没有解决我的问题,谢谢。 – Callum

0

看起来你可能会遇到很多错误,你试图在函数中回显和使用变量。当这样做并用引号中的$变量调用它们时,您将它编码为一组字符串而不是一个变量。例如:

$foo = 'bar'; 
echo $foo; 
Result: bar 

$foo = 'bar'; 
echo '$foo'; 
Result: $foo 
0

尝试改变这一点:

$name = strtolower($_POST['title']) . ".png"; 
$upload_dir = "/slideshow/"; 
$file_path = "$upload_dir/$name"; 

这样:

$file_path = $upload_dir."/".$name; 

move_uploaded_file($tmp_name, "$upload_dir/$name"); 

这样:

move_uploaded_file($tmp_name, $file_path); 

当你使用标签时不要忘记标签......否则它不会提交POST方法的值。