40

phpfopen関数を使用して(Apacheサーバー上の)/ tmpディレクトリにファイルを書き込もうとしていますが、失敗します。

<?php
$handle = fopen("/tmp/test.txt", "x");
if ($handle) 
   echo "Success!";
else 
    print_r(error_get_last());

これにより、エラーメッセージが返されます。

ストリームを開くことができませんでした:そのようなファイルまたはディレクトリはありません。

/tmpディレクトリには権限が設定されており、drwxrwxrwtWebユーザーが他のファイルをディレクトリに書き込んでいることがわかります。不思議な777ことに、アクセス許可のある別のフォルダーにスクリプトを指定すると、成功が返されます。しかし、私open_basedirには価値がありません。私は持ってsafe_mode=onallow_url_fopen=offますが、それはそれを説明するべきではないと思いますか?

これは、ApacheHttpd2.0上のPHP5.3.10です。

4

4 に答える 4

64

私はまったく同じ問題を抱えていました。PHP は でファイルを開くことに問題はないと報告しまし/tmp/myoutputfileたが、そのパスにはファイルがありませんでした。それから私はやった

find / -name "myoutputfile"

で見つけました/tmp/systemd-…/myoutputfile。Googleでこの記事を見つけました。
つまり、私の場合、それは Systemd と Apache Httpd の組み合わせでした。これが誰かに役立つことを願っています。

于 2014-04-17T19:37:54.197 に答える
0

表示されたエラーメッセージによると、フォルダがありません/tmp/。おそらく、tmp フォルダーはルート以外の場所にありますか?

ファイルが実際に存在しない場合は、ファイルを作成しようとするため、このエラーは表示されません。

このメソッドxは、ファイルが既に存在する場合にも警告を返します。(ドキュメント: http://www.php.net/manual/en/function.fopen.php )

これは、PHPを実行するユーザーがフォルダーに書き込む権限を持っていないため、これがうまくいかない可能性がある別の理由でもあると思い/tmp/ます。

于 2012-05-25T10:12:28.400 に答える