【问题标题】:php mkdir via symlink warningphp mkdir 通过符号链接警告
【发布时间】:2015-06-27 08:45:02
【问题描述】:

我想通过使用符号链接(软链接)递归地创建目录,但我遇到了警告:

警告:mkdir(): File exists in ...Path to php code... on line 21

我要创建的目录是/vagrant/resources/page

/var/www 路径中,我创建了一个名为resources 的符号链接,链接到/vagrant/resources 目录,php 代码如下:

$directory = '/var/www/resources/page';
if(!file_exists($directory)){
      mkdir($directory,0777,true);
}

/vagrant 内所有目录的权限设置为 777。 谢谢。

【问题讨论】:

  • 警告信息很明确:要创建的目录已经存在。但是请注意,warning 不是 error。可能脚本只是声称(正确地)/var/var/www/var/www/resources 已经存在......
  • 另一件事,只是一个一般提示:0777 never 的文件系统权限是一个好主意,通常不需要。您在这里降低了系统的安全性。 为什么?

标签: php symlink mkdir


【解决方案1】:

正如@arkascha 提到的,您的问题不在于符号链接,而在于您尝试创建的目录的存在。考虑到您在 mkdir 命令周围有一个公平的条件,这有点奇怪。

尝试使用is_dir() 而不是file_exists()

【讨论】:

  • 我测试了is_dir,问题没有解决。当我尝试从主路径(/vagrant)创建目录时,一切正常,但从符号链接(/var/www)路径没有创建子目录。使用此代码 mkdir 不起作用:$directory = '/var/www/resources/widgets/mysite/_html_pages/categories/Calendar.html/Calendar.html/'; $file = $directory . 'Calendar.html___1435404786.html'; $content = 'test content.'; if(!is_dir($directory)){ mkdir($directory,0777,true); } file_put_contents($file, $content); 但当我使用 /vagrant而不是/var/www 没关系。
  • 奇怪,你的代码对我有用,唯一不同的是我在 tmp 中创建了我的音乐文件夹的符号链接。您使用的是什么操作系统?文件系统是否区分大小写?如果是这样,您确定您使用的是符号链接的确切大小写吗?
  • 亲爱的 Ali,我正在使用 virtual box 和 vagrant 工具,我的操作系统是 ubuntu 12.04。经过一番努力,我再次运行 symlink 命令并解决了问题。 sudo ln -s /vagrant/resources/* /var/www/resources。谢谢。
【解决方案2】:

我用 readlink 解决了一个类似的问题。还要检查它是否是链接。之后的路径可以按预期使用。

$path = '/var/www/resources'
if (is_link($path)) {
    $path = readlink($path);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多