无法使用perl创建文件(权限被拒绝)

时间:2017-05-26 21:30:28

标签: 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";
  close $fh;

在我完成这项工作之后,我将继续处理我必须写的数据。

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

我在Ubuntu 14.04工作

2 个答案:

答案 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;