CLIから実行すると期待どおりに機能するphpファイルがありますが、パブリックIPアドレスを介してChromeから呼び出されると、エコーされますが、コンテンツは保存されず、cache.htmlという名前のファイルも作成されません。
<?php
$cacheFile = '/home/directories/php/cache.html';
ob_start();
echo '<h1>Hello world to cache</h1>';
$content = ob_get_contents();
ob_end_clean();
file_put_contents($cacheFile,$content);
echo $content;
?>
問題なく動作するphpページがたくさんありますが、これはWebページをファイルに保存する最初の試みです。PHPMailerを使用してファイルを自分宛にメールで送信するつもりです。現在のページをHTMLとしてサーバーに保存するというChetanSharmaの回答に触発されました。
/etc/php7/cli/php.iniと/etc/php7/apache/php.iniはどちらも次のように設定されています。
;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
; http://php.net/allow-url-fopen
allow_url_fopen = On
私がApacheでサービスを提供しているときに、ob_startに関するマニュアルからの警告が心配です。https://www.php.net/manual/en/function.ob-start.php
警告一部のWebサーバー(Apacheなど)は、コールバック関数を呼び出すときにスクリプトの作業ディレクトリを変更します。コールバック関数でchdir(dirname($ _ SERVER ['SCRIPT_FILENAME']))などを使用して元に戻すことができます。
私は最初に$cachefile = /cache.html
を設定し、出力を設定します
file_put_contents(chdir(dirname($_SERVER['SCRIPT_FILENAME']))$cachefile,$content);
それはうまくいきませんでした。ただし、$cacheFile = '/home/directories/php/cache.html';
CLIでは問題なく機能します。
ob_end_flush()の代わりにob_end_clean()を使用しましたが、違いはありません。
なぜブラウザで失敗するのですか?興味がありますが、最終的には、lamp / phpで生成されたWebページを、PHPMailerによる添付ファイルとして使用するために、ローカルのphp-projectディレクトリ内のファイルにフォーマットなどで保存したいと思います。これは私の最善の方法のように思えましたが、ブラウザの障害により私は困惑しました。
CLIのphpは、コマンドを実行しているユーザー(ログインしているユーザー)のアクセス許可の下で実行されるため、CLIからこのディレクトリを作成した可能性があるため、そのディレクトリへのアクセス許可を確実に持っています。
ブラウザでphpを実行しているユーザーのディレクトリ所有者と権限を変更します。
sudo chown -R your-apache-user /home/directories/php/
//apache-user you found as mentioned in question below
https://serverfault.com/questions/125865/finding-out-what-user-apache-is-running-as
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加