2017-05-26 14 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; 

私はこの作業を行うことができます、私は書き込む必要があるデータを続けます。

私はlighttpdを "www-data"ユーザで使用しています。私は数時間それを解決しようとしてきました... さらに、私は "die"の使い方がわからないので、私は$ messageを使用しています。私が "die"を使うと "500 - Internal Server Error"と表示されます。

私はUbuntuの14.04で働いています

+0

スクリプトを実行するユーザーに、そのディレクトリに書き込み権限がありますか?そして、ファイルがすでに存在する場合、ユーザーはそのファイルに対する書き込み権限も持っていますか?たとえば、そのユーザとしてログインし、そのディレクトリに 'cd'を実行した場合、' touch report.txt'を実行すると動作しますか? –

+1

あなたが書くすべてのコードの始めに、 'use strict;'と 'use warnings;'を含めてください。 – bytepusher

答えて

1

ITSはおそらくあなたのユーザーがあなたがへの書き込みをしようとしているフォルダへのアクセス権がありません。

これは、ブラウザにエラーメッセージを送信しますドキュメントルート外のファイルを作成してみてください...あなたは、あなたのディレクトリへのperlスクリプトをドロップ2番目の要求でそれを実行することを想像してみて

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

しかし、あなたはmodule

use strict;に忘れないでくださいインストールが必要な場合がありますperl

4

500 Server Errorの処理については、the answers to this questionを参照してください。基本的には、サーバーのエラーログを探します。

また、ブラウザにエラーを表示することもできます。これはデフォルトではオフにし、開発時にのみオンにする必要があります。これを行うためのさまざまなモジュールがあります。使用するWebフレームワークによって異なります。あなたは必要最小限のCGIのようなものを使用している場合、それはCGI::Carpです。あなたはおそらくべき、そしてDancer::Loggerコントロールは、エラーメッセージが行くDancerのようなものを、使用している場合。


コードを実行しているユーザーにファイルを書き込む権限がないため、権限エラーが発生しています。この場合、ユーザーはwww-dataです。なぜあなたが許可を拒否されているのかは分かりません。自分でそれを理解しなければなりません。ディレクトリでwww-dataがファイルを書き込めない可能性があります。 www-dataのアクセス許可は、Webサーバーが攻撃の容易なターゲットであるため、一般に非常に制限されています。

This tutorial on Unix file permissionsは役立つはずです。

ダンサーを使用している場合は、コマンドラインからプログラムを実行し、コンソールにエラーを表示することができます。 sudo -u www-datawww-dataとして実行していることを確認するには、www-dataの許可の問題をシミュレートしないでください。

関連する問題