質問: CentOS Linux release 7.5.1804 (Core) Server version: Apache/2.4.6 PHP 7.2.7 (cli) (built: Jun 20 2018 08:21:26) ( NTS ) で、fopen してファイルの読み書きをしようとしています。 $filepointer=fopen("/var/www/test.log", "x"); に対して Warning: fopen(/var/www/test.log): failed to open stream: File exists in /var/www/test.php on line 9 となりwarningばかりで失敗します。 ディレクトリもファイルもパーミッションは 777 でapacheが所有者になっていても出ます。 "x" を "a" にすれば Warning: fopen(/var/www/test.log): failed to open stream: Permission denied in /var/www/test.php on line 9 "n" だと Warning: fopen(/var/www/test.log): failed to open stream: Success in /var/www/test.php on line 9 です。Successなのに失敗のようです。 ちなみにWindows10 のxamppで同じphpを動かすと何の問題も無く動きます。 どういった所を確認すればよいでしょうか?
回答: >'x' 書き込みのみでオープンします。ファイルポインタをファイルの先頭に置きます。 ファイルが既に存在する場合には fopen() は失敗し、 E_WARNING レベルのエラーを発行します。 ファイルが存在しない場合には新規作成を試みます。 これは open(2) システムコールにおける O_EXCL|O_CREAT フラグの指定と等価です。 このオプションはPHP4.3.2以降でサポートされ、また、 ローカルファイルに対してのみ有効です。 とのことです。おそらく第二引数の指定がまずいです。 読み書きモードで開くなら'r+'とかにしてみてはいかがでしょうか。