Can';t使用perl创建文件(权限被拒绝)
我最近开始学习perl(本周)。 客户端将向服务器请求文件,服务器必须使用请求的数据创建文件 所以我一直在尝试创建一个文件,但它拒绝许可 现在:这是代码的一部分。我从网上拿的Can';t使用perl创建文件(权限被拒绝),perl,file,ubuntu,creation,Perl,File,Ubuntu,Creation,我最近开始学习perl(本周)。 客户端将向服务器请求文件,服务器必须使用请求的数据创建文件 所以我一直在尝试创建一个文件,但它拒绝许可 现在:这是代码的一部分。我从网上拿的 $filename = 'report.txt'; open($fh, '>', $filename) or $message="Could not open file '$filename' $!"; print $fh "My first report generated by perl\n";
$filename = 'report.txt';
open($fh, '>', $filename) or $message="Could not open file '$filename' $!";
print $fh "My first report generated by perl\n";
close $fh;
在我完成这项工作之后,我将继续写我必须写的数据
我正在使用lighttpd和“www数据”用户。我已经花了几个小时试图解决这个问题。。。
此外,我使用$message是因为我不知道如何使用“die”。当我使用“die”时,它会显示“500-内部服务器错误”,而不会显示其他内容
我在Ubuntu 14.04中工作,可能您的用户无法访问您试图写入的文件夹 假设您将一个perl脚本放到目录中,然后用第二个请求执行它 尝试在文档根目录之外创建文件 这将向浏览器发送错误消息
use CGI::Carp qw(fatalsToBrowser);
die "Bad error here";
但您可能需要安装
别忘了在perl中,可能您的用户无法访问您试图写入的文件夹 假设您将一个perl脚本放到目录中,然后用第二个请求执行它 尝试在文档根目录之外创建文件 这将向浏览器发送错误消息
use CGI::Carp qw(fatalsToBrowser);
die "Bad error here";
但您可能需要安装
不要忘记使用perl处理500服务器错误,请参阅。基本上,查找服务器的错误日志 或者,您可以在浏览器中显示错误。这在默认情况下应该是关闭的,并且只有在开发时才打开。有各种各样的模块可以为您实现这一点,这取决于您使用的web框架。如果你使用的是像CGI这样的赤裸裸的东西,那么它就是。如果您正在使用类似的东西,那么您可能应该控制错误消息的去向
出现权限错误是因为运行代码的用户没有写入文件的权限。在这种情况下,它是
www-data
用户。我不能告诉你为什么你被拒绝,你得自己弄清楚。目录可能不允许www-data
写入文件。www-data
上的权限通常非常有限,因为web服务器很容易成为攻击的目标
应该有帮助
如果您使用的是Dancer,您可以从命令行运行该程序,并在控制台上获得错误。您必须
sudo-u www-data
以确保以www-data
的身份运行它,以自己的用户身份运行它将不会模拟www-data
的权限问题。关于处理500服务器错误,请参阅。基本上,查找服务器的错误日志
或者,您可以在浏览器中显示错误。这在默认情况下应该是关闭的,并且只有在开发时才打开。有各种各样的模块可以为您实现这一点,这取决于您使用的web框架。如果你使用的是像CGI这样的赤裸裸的东西,那么它就是。如果您正在使用类似的东西,那么您可能应该控制错误消息的去向
出现权限错误是因为运行代码的用户没有写入文件的权限。在这种情况下,它是
www-data
用户。我不能告诉你为什么你被拒绝,你得自己弄清楚。目录可能不允许www-data
写入文件。www-data
上的权限通常非常有限,因为web服务器很容易成为攻击的目标
应该有帮助
如果您使用的是Dancer,您可以从命令行运行该程序,并在控制台上获得错误。您必须
sudo-u www-data
以确保以www-data
的身份运行它,以自己的用户身份运行它不会模拟www-data
的权限问题。运行脚本的用户在该目录中是否具有写入权限?如果该文件已经存在,用户是否也对该文件具有写入权限?。例如,如果您以该用户身份登录并cd
到该目录,那么运行touch report.txt
是否有效?您应该包括use strict代码>和使用警告代码>在您编写的所有代码的开头。运行脚本的用户在该目录中是否具有写入权限?如果该文件已经存在,用户是否也对该文件具有写入权限?。例如,如果您以该用户身份登录并cd
到该目录,那么运行touch report.txt
是否有效?您应该包括use strict代码>和使用警告代码>在您编写的所有代码的开头。