我最近开始使用perl(本周)。 客户端将向服务器询问文件,服务器必须使用请求的数据创建文件。
所以我一直试图创建一个文件,但它拒绝允许。
目前:这是代码的一部分。我从网上拿走了它。
$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-data"用户。我已经花了几个小时试图解决它...... 此外,我正在使用$ message,因为我不知道如何使用" die"。当我使用" die"它会显示" 500 - 内部服务器错误"没有别的。
我在Ubuntu 14.04工作
答案 0 :(得分:4)
关于处理500服务器错误,请参阅the answers to this question。基本上,找到服务器的错误日志。
或者,您可以向浏览器显示错误。默认情况下应该关闭它,并且仅在开发中打开。有各种各样的模块可以帮助您,这取决于您正在使用的Web框架。如果你正在使用像CGI那样的准分子,那么就是CGI::Carp。如果您使用Dancer之类的内容,那么Dancer::Logger会控制错误消息的位置。
您收到权限错误,因为令人意外的是,运行代码的用户无权编写文件。在这种情况下,它是www-data
用户。我无法告诉你为什么你被拒绝许可,你必须自己解决这个问题。目录可能不允许www-data
写入文件。 www-data
上的权限通常非常有限,因为Web服务器很容易受到攻击。
This tutorial on Unix file permissions应该有帮助。
如果您正在使用Dancer,则可以从命令行运行该程序,并在控制台上获取错误。您必须sudo -u www-data
确保以www-data
运行它,并运行它,因为您自己的用户不会模拟www-data
的权限问题。
答案 1 :(得分:1)
可能您的用户无法访问您尝试写入的文件夹。
想象一下,你将perl脚本放到你的目录中,然后用第二个请求执行它......
尝试在文档根目录之外创建文件
这会将错误消息发送到浏览器
use CGI::Carp qw(fatalsToBrowser);
die "Bad error here";
但您可能需要安装module
别忘了perl中的use strict;