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

标签 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;

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

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

我在 Ubuntu 14.04 中工作

最佳答案

关于处理 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的权限问题。

关于perl - 无法使用 perl 创建文件(权限被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44210371/

相关文章:

python - 包控制 : The dependency 'markupsafe' is not currently installed

ubuntu - Airflow Upstart 直接停止/等待

python - 如何在转发之前进行深度数据包检查

python - 从文件中搜索字符串 - python

c - 使用 fscanf 读取空格

c++ - 同步独立的应用程序。 (如何在运行时检查文件是否被另一个程序修改)

perl - 确定Perl代码引用的子例程名称

python pdb 相当于可调用的 perldb 方法?

linux - perl 脚本在命令行上运行但不在 crontab 中运行

打印时 Perl OO 父类(super class)变量未绑定(bind)到子类对象