我有一个问题,我试图去上班。首先,我很久以前写了一个PERL脚本,它在另一台服务器上。我们正在创建一个新的服务器,我已经下载/安装了草莓PERL 64位。我现在正在检查所有PERL脚本,以确保所有工作都在新服务器上。
我将脚本转换为草莓想要的新方式(使用require在线使用其他文件),但我无法通过以下错误:权限被拒绝打开文件进行写入
我将启动一个调用内联文件的shell程序:
require "cgi/cr/main_test.pl";
此数组包含将运行的文本文件:
my @main = ("BOOKS","CDs","DVDs","VIDEOS","PERIODICALS","VIDEO-GAMES","TOYS","RECORDED-BOOKS","BINS");
require调用程序打开文件以写入结果,然后遍历每个文本文件并显示并在每个文件中添加数字。
#!/usr/bin/perl -w
my $recFnd = "C:\\inetpub\\wwwroot\\cgi-bin\\CustomerRelations\\recs_found.txt";
chmod 0755, $recFnd;
print "<p>$recFnd</p>";
open (my $newloc, '>', $recFnd) or die "Couldn't open: $!";
以上是$ recFnd打开一个文本文件,将写入任何已找到的代码(我有一个包含所有代码的文件。我使用两者中的数据来查找已使用的任何新代码。) 。下一行我更改了文件权限,但这只是通过(可能有效,但我无法测试,因为这是一个Windows环境)。然后我打印文件的位置7名称,以确保它具有正确的文件。最后,打开我尝试过的每个版本都可以让它工作。最初打开文件的代码为:
open (NEWLOC, "> recs_found.txt ") || die;
无论我做什么,我都会收到许可错误。要写入的文件所在的文件夹中的所有人都在建筑物中完全控制。我不知道我能做些什么。
如果有人可以提供帮助,我们将非常感激。
答案 0 :(得分:0)
因此,如果这是Strawberry Perl,这是在Windows上,如果这些是脚本,它们可能在系统帐户下运行。您的问题可能出在文件系统问题上,而不是在Perl端。
解决和解决此问题的方法是通过验证运行该服务的用户来实现。如果这是一个Web应用程序,它将是运行Apache,IIS等的任何服务。它可能是NetworkService
帐户。但是,您应该验证这一点。与所有事情一样,最好为所有父目录提供读取权限并写入对此目录的访问权。
请注意,Windows使用ACL作为模型而不是UNIX UGW模型。
如果其他脚本可以从Web服务器写入文件,那么还会发生其他事情,但如果是这样的话,我会非常惊讶。
此外,您的帖子有一个UNIX shebang行,而您的帖子表示Windows实现。这部分是迂腐,但解决这些问题需要注重细节,所以在这里迂腐是好的。