PHP创建文件夹(如果它不存在)

Mar*_*arc 4 php upload cakephp image

我正在创建一个中等大小的应用程序

该应用程序包含很多产品.

现在这些产品有很多图像(一个产品可以有5-6个图像)

为了尝试进行某种排序,我想为每个产品创建一个文件夹,该文件夹包含绑定到产品的所有图像.

到目前为止,我已经尝试了以下内容:

move_uploaded_file($file, APP.'product_images/'.$product_id.'/'.$image['name']);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个时,我收到以下错误:

Warning (2): move_uploaded_file(/var/www/udlejnings-priser/cake/app/product_images/22/afterClick.png): failed to open stream: No such file or directory [APP/Controller/ImagesController.php, line 56]

Warning (2): move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php472ci6' to '/var/www/udlejnings-priser/cake/app/product_images/22/afterClick.png' [APP/Controller/ImagesController.php, line 56]
Run Code Online (Sandbox Code Playgroud)

现在我不是一个完整的菜鸟,并且知道这意味着我缺少该文件夹的权限.

但问题是,如果文件夹不存在(即这是第一次上传该产品的图像),则应创建一个新文件夹.

我的问题是两个分手了.

  1. 这是否会自动创建一个新文件夹(如果它尚不存在)?
  2. 如何为新创建的文件夹授予权限以避免此问题?

AD7*_*six 5

[我]知道这意味着我缺少该文件夹的权限.

实际上没有=).错误消息显示:

无法打开流:没有这样的文件或目录

这没有引用problrm的权限:您尝试写入的包含文件夹不存在.

这是否会自动创建一个新文件夹(如果它尚不存在)?

没有.

如何授予新创建的文件夹权限?

没有必要这样做 - 创建的任何内容都具有允许webserver用户读取文件的正确权限.但是首先需要尝试创建一个文件夹,但问题并非如此.

使用CakePHP,可以使用Folder类来执行此操作:

App::uses('Folder', 'Utility');
$dir = new Folder('/path/to/folder', 2);
Run Code Online (Sandbox Code Playgroud)

第二个参数用于创建新文件夹(如果不存在).在问题的上下文中,这意味着代码看起来像这样:

function whatever() {

    if ($this->request->data) {
        ...

        $unused = new Folder(APP.'product_images/'.$product_id, true);
        if (move_uploaded_file($file, APP.'product_images/'.$product_id.'/'.$image['name'])) {
            ...
        } else {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该文件夹APP/product_images应该已经存在,并且必须具有以下权限:Web服务器用户(例如apache)可以写入该文件夹,否则将无法创建子文件夹/上载文件.假设APP/product_images存在并且webserver用户具有写入它的权限,则无需修改上载文件的权限 - 用户创建的文件默认情况下可由该用户读取.