【问题标题】:Permission Denied Issue in Perl - Need SolutionPerl 中的权限被拒绝问题 - 需要解决方案
【发布时间】:2013-07-28 05:22:20
【问题描述】:

我在使用 Perl 创建目录时遇到问题:

$country = 7;
$city = 12;   
$uploadFolder = "/opt/v-hosts/user/html/images/h_photos/ls";
$destination = $uploadFolder;
mkdir($destination) if(!-e $destination);
$destination .= "/$country";
mkdir($destination,0755) if(!-e $destination);
$destination .= "/$city";
mkdir($destination,0755) if(!-e $destination);

当我尝试执行此代码时,它应该创建以下目录:

/opt/v-hosts/user/html/images/h_photos/ls/7/12

不幸的是代码返回错误:

mkdir /opt/v-hosts/user/html/images/h_photos/ls/7:/opt/v-hosts/user/epbin/ls.cgi 第 1376 行的权限被拒绝。\n

我尝试将ls文件的权限更改为777,但没有解决问题。

【问题讨论】:

  • 您没有足够的权限访问$uploadFolder。检查ls -l /opt/v-hosts/user/html/images/h_photos/。所以ls forlder 已经存在,而你没有权限...
  • 真的我不明白你的意思。我的问题是如何访问文件然后在子目录中创建新文件?
  • 是的。并且错误消息的意思是,您没有权限。
  • 在这种情况下,我必须更改哪个文件的权限?
  • 检查路径/opt/v-hosts/user/html/images/h_photos/中每个目录的权限。我的猜测是中间目录之一阻止了你。这些中间目录不需要是rwx,但对于脚本运行的uid,它们至少需要是x

标签: perl permissions directory mkdir


【解决方案1】:

这不是 Perl 错误。 /opt 文件夹或某些子文件夹不可由负责 Apache 或 CGI 进程的系统用户写入。

$ perl -e 'use File::Path; $d=22; $city=7; mkpath "/tmp/moo/fooo/$city/$d";'
$ file /tmp/moo/foo/7/22
/tmp/moo/foo/7/22: directory

要修复您的权限,请使用chown。例如:

$ ssh localhost chown apachDaemonUser /tmp/random

【讨论】:

    最近更新 更多