【问题标题】:Problems with uploading files with PHP使用 PHP 上传文件的问题
【发布时间】:2011-08-24 06:03:55
【问题描述】:

我当前的代码(不工作):

<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(slideshow/test.png) [function.move-uploaded-file]:无法打开流:第 93 行 /home/xxx/xxx/back_end/add.php 中的权限被拒绝警告: move_uploaded_file() [function.move-uploaded-file]: 无法将 '/tmp/phpGXQv9g' 移动到 /home/xxx/xxx/back_end/add.php 第 93 行中的 'slideshow/test.png'"

我是这方面的初学者,所以请用简单的方式解释一下。

【问题讨论】:

  • &lt;form&gt;标签潜伏在某处吗?

标签: php html forms file-upload


【解决方案1】:

您几乎没有错误处理,请遵循 php.net 上的建议:

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

首先,为了调试,至少打印出$_FILES 数组:

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

【讨论】:

  • 它返回:Array ([name] => [type] => [tmp_name] => [error] => 4 [size] => 0)
  • @Callum 那你的 HTML 是错误的,它没有提交文件:4 = no file
  • 你能在上面看到我哪里出错了,因为我什么都看不到吗?
  • @Callum no &lt;form&gt; 开始标记。
  • @Callum 目录必须是可执行的,777
【解决方案2】:

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

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

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

【讨论】:

  • 没错,虽然它没有解决我的问题,但还是谢谢。
【解决方案3】:

在您尝试在函数中回显和使用变量时,看起来可能有很多错误。这样做并使用引号中的 $variable 调用它们时,您将其编码为设置字符串而不是变量。例如:

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

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

【讨论】:

    【解决方案4】:

    尝试改变这一点:

    $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 方法的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多