2017-05-26 116 views
0

我最近开始使用perl(本周)。 客户端会向服务器请求一个文件,服务器必须用请求的数据创建该文件。无法使用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; 

我会继续我写的数据后,我可以使这项工作。

我使用“www-data”用户的lighttpd。我已经花了几个小时试图解决它... 此外,我使用$消息,因为我不知道如何使用“死”。当我使用“死”时,它会显示“500 - 内部服务器错误”,没有别的。

我在Ubuntu 14.04的工作

+0

运行该脚本的用户是否具有该目录下的写入权限?而且,如果该文件已经存在,用户是否也有该文件的写权限?例如,如果您以该用户的身份登录,并且“cd”登录到该目录,那么如果您运行“touch report.txt”,它会起作用吗? –

+1

你应该在你编写的所有代码的开始处包含'use strict;'和'use warnings''。 – bytepusher

回答

1

它可能是你的用户不能够访问你试图写入该文件夹。

试想一下,你把一个Perl脚本到您的目录,然后用第二个请求执行它......

尝试创建文档根目录以外的文件

这将发送错误信息到浏览器

use CGI::Carp qw(fatalsToBrowser); 
die "Bad error here"; 

但是你可能需要安装module

不要忘记use strict; in perl

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应该有所帮助。

如果您使用的是舞者,您可以从命令行运行该程序,并在控制台上获取错误。您必须sudo -u www-data才能确保您将其运行为www-data,因为您的用户不会模拟www-data的权限问题。

相关问题