Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的php程序没有将上传的图像移动到一个目录(ubuntu)_Php_Image_Ubuntu - Fatal编程技术网

我的php程序没有将上传的图像移动到一个目录(ubuntu)

我的php程序没有将上传的图像移动到一个目录(ubuntu),php,image,ubuntu,Php,Image,Ubuntu,我是Php的初学者 我已经尝试了几个小时将上传的图像移动到一个目录,但没有成功。我已经阅读了有关该主题的其他问题,但我无法解决该问题: 1) 我已经检查了目录是否存在(参见下面的输出) 2) 看起来这个目录是不可写的,但我不仅尝试将映像保存在一种系统目录中,而且还保存在我的计算机的一个简单目录中 3) 图像似乎已正确上载 4) 我已经使用过“sudo chmod-R 775/home/daniel/NetBeansProjects/NewPhpProject/photos”,但这应该不是问题,因

我是Php的初学者

我已经尝试了几个小时将上传的图像移动到一个目录,但没有成功。我已经阅读了有关该主题的其他问题,但我无法解决该问题:

1) 我已经检查了目录是否存在(参见下面的输出)

2) 看起来这个目录是不可写的,但我不仅尝试将映像保存在一种系统目录中,而且还保存在我的计算机的一个简单目录中

3) 图像似乎已正确上载

4) 我已经使用过“sudo chmod-R 775/home/daniel/NetBeansProjects/NewPhpProject/photos”,但这应该不是问题,因为这不是一个系统目录

我不知道发生了什么事

丹尼尔

请参见下面的我的代码:

uploadImage.php

<html>
    <body>
        <h2> Upload your photo. </h2>
        <form action="moveImage.php" method="post"
              enctype="multipart/form-data">
            <label for="file">Filename:</label>
            <input type="file" name="file" id="file"><br>
            <input type="submit" name="submit" value="Submit">
        </form>
    </body>
</html>
    <?php
    if ($_FILES["file"]["error"] > 0) {
        echo "Error: " . $_FILES["file"]["error"] . "<br>";
    } else {

        //$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/photos/";
        //$upload_dir = dirname(__FILE__) . "/photos/";
        $upload_dir ="/home/daniel/NetBeansProjects/NewPhpProject". "/photos/";
        echo "upload_dir: " . $upload_dir . "<br>";
        if (file_exists($upload_dir)) {
            if (is_writable($upload_dir)) {
                $target = $upload_dir; //"dirname(__FILE__)" . "photos/";
                $target = $target . basename($_FILES['file']['name']);
                $moved = move_uploaded_file($_FILES['file']['name'], "$target");
            } else {
                echo 'Upload directory is not writable<br>';
            }
        } else {
            echo 'Upload directory does not exist.<br>';
        }
        echo $target . "<br>";
    //  echo dirname(__FILE__)."<br>";
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?> 

上传你的照片。
文件名:

movingImage.php

<html>
    <body>
        <h2> Upload your photo. </h2>
        <form action="moveImage.php" method="post"
              enctype="multipart/form-data">
            <label for="file">Filename:</label>
            <input type="file" name="file" id="file"><br>
            <input type="submit" name="submit" value="Submit">
        </form>
    </body>
</html>
    <?php
    if ($_FILES["file"]["error"] > 0) {
        echo "Error: " . $_FILES["file"]["error"] . "<br>";
    } else {

        //$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/photos/";
        //$upload_dir = dirname(__FILE__) . "/photos/";
        $upload_dir ="/home/daniel/NetBeansProjects/NewPhpProject". "/photos/";
        echo "upload_dir: " . $upload_dir . "<br>";
        if (file_exists($upload_dir)) {
            if (is_writable($upload_dir)) {
                $target = $upload_dir; //"dirname(__FILE__)" . "photos/";
                $target = $target . basename($_FILES['file']['name']);
                $moved = move_uploaded_file($_FILES['file']['name'], "$target");
            } else {
                echo 'Upload directory is not writable<br>';
            }
        } else {
            echo 'Upload directory does not exist.<br>';
        }
        echo $target . "<br>";
    //  echo dirname(__FILE__)."<br>";
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?> 

输出:

上传目录:/home/daniel/NetBeansProjects/newphp项目/photos/

上载目录不可写

上传:FotoCaju.jpeg

类型:图像/jpeg

大小:0.666015625 kB


存储在:/tmp/phpmTJWMi中

您需要更改
/home/daniel/NetBeansProjects/NewPhpProject/photos/
的目录权限。为此,您将使用chmod命令


$:
chmod+w/home/daniel/NetBeansProjects/NewPhpProject/photos/
您需要更改
/home/daniel/NetBeansProjects/NewPhpProject/photos/
的目录权限。为此,您将使用chmod命令


$:
chmod+w/home/daniel/netbeansproject/NewPhpProject/photos/
PHP.net网站评论可写:

Note: The results of this function are cached. See clearstatcache() for more details.

试试看。在更改文件夹权限之前,可能会将结果与结果一起缓存。

PHP.net网站评论可写:

Note: The results of this function are cached. See clearstatcache() for more details.

试试看。在更改文件夹权限之前,可能会将结果与结果一起缓存。

问题可能是,通往
/home/daniel/NetBeansProjects/NewPhpProject/photos/
的每个目录也必须是Apache可写的


由于更改主目录的权限通常不是一个好主意,因此您应该在Apache有权访问的地方创建一个指向目标目录的
public\u html
(如
/var/www
)之外的位置,应该对Apache用户具有正确的权限。

问题可能是通往
/home/daniel/NetBeansProjects/NewPhpProject/photos/
的每个目录也必须是Apache可写的



由于更改主目录的权限通常不是一个好主意,因此您应该在Apache有权访问的地方创建一个指向目标目录的
public\u html
(如
/var/www
)之外的位置,应该具有Apache用户的正确权限。

目录的路径也必须是可写的。有很多解决方案,但我认为最好的办法是创建一个Apache可以写入的地方,指向您所需的目录。@Misterman为什么要使用符号链接?@Phil,因为它很容易实现,如果项目移动到另一个框中,很容易记住,将来很容易更改目标目录,并且不涉及更改用户主目录的权限。权限的存在是为了保护用户的安全,因此请尽量避免授予超出必要的权限。作为削弱对
照片
目录的权限的替代方法,您可以通过类似suExec或mpm itk的方式,以适当的用户身份运行PHP脚本。@Mistermanchly,但您不能仅将权限应用于符号链接。真正的目的地仍然需要脚本可写。我想是注释掉了
\uuuuu DIR\uuuuuuuuu.'/照片“
是最好的方法。目录的路径也必须是可写的。有很多解决方案,但我认为最好的办法是创建一个Apache可以写入的地方,指向您所需的目录。@Misterman为什么要使用符号链接?@Phil,因为它很容易实现,如果项目移动到另一个框中,很容易记住,将来很容易更改目标目录,并且不涉及更改用户主目录的权限。权限的存在是为了保护用户的安全,因此请尽量避免授予超出必要的权限。作为削弱对
照片
目录的权限的替代方法,您可以通过类似suExec或mpm itk的方式,以适当的用户身份运行PHP脚本。@Mistermanchly,但您不能仅将权限应用于符号链接。真正的目的地仍然需要脚本可写。我想是注释掉了
\uuuuu DIR\uuuuuuuuu.'/照片“
是最好的方法。不幸的是,这不是问题所在。我刚刚(现在)试过,但问题仍然存在。我想这类似于上面的第(4)项。@DanielTheRocketMan如果您运行的是Apache,它通常在
www-data
用户下运行,因此用户必须具有对该目录的写访问权限。使用
chmod 777/home/daniel/NetBeansProjects/NewPhpProject/photos/
使文件夹可以公开访问(r+w+e)。或者,您可以
chown
www-data拥有的文件夹,但这没有任何意义,因为它位于daniel用户的主目录中。我按照您的建议,输出发生了变化,“上载目录不可写”一行消失了(谢谢)。但是,图像不在此目录中!我的代码中缺少什么吗?@DanielTheRocketMan在使用move\u上传的\u文件声明$moved后,检查$moved是否为真。如果错误,请检查错误日志以查看是否存在错误