【问题标题】:Error creating directory using mkdir function in Codeigniter在 Codeigniter 中使用 mkdir 函数创建目录时出错
【发布时间】:2016-08-25 02:27:01
【问题描述】:

我正在尝试在 Codeigniter 安装中使用 php 的 mkdir 函数递归地创建一个目录。我的代码如下所示:

mkdir('docs/client/bills/payd', 0777, true)

docs 目录已经存在于我的站点根目录中,client 目录正在使用 0755 权限创建,bills 目录正在创建中创建时使用权限 1341(奇怪!),而最后一个目录 payd 从未创建。
我尝试将 mkdir 参数列表中的权限更改为 0、755 等……但没有任何改变。我还尝试将 umask 设置为 0, 0777 ......但什么也没有。

umask(0777);
mkdir('docs/client/bills/payd', 0777, true)

谁能说我做错了什么?上面的代码是从 Codeigniter 常规控制器调用的。

【问题讨论】:

  • 在尝试了以下 Lorenzo Magno 和 Tpojka 的两个回复后,我意识到 cPanel 正在创建相同的路径,但出现相同的错误。然后我意识到创建目录的 last_modified 时间与昨天创建目录的时间相同...... cPanel 正在恢复我错误的目录创建版本。我刚刚更改了客户端名称并且创建工作正常。问题开始是因为我在第一次尝试时没有将递归参数设置为 true,当我完成时,cPanel 一直在重新创建/恢复第一个错误状态。
  • 总之,我的第一个版本的代码有效,因此 Lorenzo 和 Tpojka 的响应也有效......我接受 Lorenzo 的答案是正确的,因为他首先回答了。谢谢两位。

标签: php codeigniter mkdir


【解决方案1】:

试试

if ( ! is_dir( FCPATH.'docs/client/bills/payd' )//FCPATH is absolute path to the project directory
{
    mkdir( FCPATH.'docs/client/bills/payd', 0777, true );//although 0755 is just fine and recomended for uploading and reading
}

【讨论】:

    【解决方案2】:

    使用它来指定它的工作目录,它可能会混淆目录的位置。

    mkdir( getcwd().'docs/client/bills/payd', 0777, true);
    

    getcwd 是您的 codeigniter 的工作目录。您可以在 PHP 指南中搜索 getcwd() 函数以使其更清楚。

    这应该可行。

    编辑

    为了更清楚,这将返回以下内容:

    C:\xampp\htdocs\YOUR_ROOT_DIRECTORY\docs\client\bills\payd
    

    再次编辑

    虽然再次阅读后,这只会创建 payd 并假设 docs\client\bills 已经创建。您可以使用 mkdir 或使用文件资源管理器创建客户和账单。但是还有其他 PHP 方法,如果需要我可以提供帮助。

    祝你好运

    【讨论】:

      【解决方案3】:

      PHP mkdir 也出现了这个奇怪的“1341”权限错误,与 CodeIgniter 无关,这是一个纯粹的 PHP 问题!

      经过大量实验,我可以让它工作的唯一方法是在路径末尾包含一个斜杠,并将递归标志设置为“真”。 (尽管 PHP 文档没有显示最后的斜线,而且我只创建了一个目录。)

      $existing_path = '/these/directories/already/exist/';
      mkdir( $existing_path . 'new-directory/', 0755, true);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-26
        • 2018-02-06
        相关资源
        最近更新 更多