【问题标题】:PHP create folder if it does not existPHP创建文件夹,如果它不存在
【发布时间】:2013-11-05 17:38:02
【问题描述】:

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

这个应用程序包含很多产品。

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

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

到目前为止,我已经尝试了以下方法:

move_uploaded_file($file, APP.'product_images/'.$product_id.'/'.$image['name']);

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

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]

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

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

我的问题分为两部分。

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

【问题讨论】:

    标签: php image cakephp upload


    【解决方案1】:

    试试这个:

    if (!file_exists('path/to/directory')) {
        mkdir('path/to/directory', 0777, true);
    }
    

    1) 如果新文件夹不存在,是否会自动创建它。 => file_existsmkdir

    2) 我怎样才能给新创建的文件夹权限,这样我才能避免这个问题 => 0777

    【讨论】:

    • 推荐0777权限,尤其是解决一个不存在的权限问题,是个坏建议。
    【解决方案2】:
    1. 不,它不会动态创建文件夹。
    2. 使用chmod() 更改权限。

    要检查某些文件夹的存在,您也可以使用is_dir()

    【讨论】:

      【解决方案3】:

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

      其实没有=)。错误信息如下:

      打开流失败:没有这样的文件或目录

      没有提及权限问题是:您尝试写入的包含文件夹不存在。

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

      没有。

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

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

      使用 CakePHP,Folder class 可以用来做到这一点:

      App::uses('Folder', 'Utility');
      $dir = new Folder('/path/to/folder', 2);
      

      第二个参数使用to create a new folder if it doesn't exist。在问题的上下文中,这意味着代码看起来像这样:

      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 {
                  ...
              }
          }
      }
      

      文件夹APP/product_images应该已经存在,并且必须有权限使得网络服务器用户(例如apache)可以写入,否则将无法创建子文件夹/上传文件。假设APP/product_images 存在且网络服务器用户有权对其进行写入,则无需修改上传文件的权限 - 用户创建的文件默认情况下该用户可读。

      【讨论】:

        【解决方案4】:

        添加魔法常数总是一个好主意 __DIR__ 到文件或目录路径。 (__DIR__ 给出脚本所在目录的路径)。在错误消息中,“APP”以与路径名称不同的颜色突出显示。这可能暗示无法找到路径。

        【讨论】:

          猜你喜欢
          • 2020-07-12
          • 2022-01-11
          • 1970-01-01
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 2015-09-12
          • 2019-04-21
          • 2014-11-24
          相关资源
          最近更新 更多