WebアプリケーションをCentOS 5からCentOS 7に移行しています。/ tmpディレクトリに関する新しいセキュリティ機能が私のコードを壊しています。私はそれをどうやって処理するのがベストかと思っています。PHP:本当の/ tmpパスを取得するには?
私はLaTeXファイルを作成し、それをPDFに変換するコマンドを実行し、適切なヘッダーでユーザーに提供するPHPコードを用意しています。それが今立っているとして、ここでは、コードの関連行の一部です:
$fileroot = "/tmp/addr".getmypid();
ob_start();
/* echo all the LaTeX stuff */
file_put_contents($fileroot.".tex",ob_get_contents());
ob_end_clean();
exec("cd /tmp;uplatex -interaction=batchmode --output-directory=/tmp $fileroot", $output, $return);
/usr/lib/systemd/system/php-fpm.serviceの設定はPHP関数内/tmp
が本当にへの呼び出しが発生PrivateTmp=true
を含み、 /tmp/systemd-private-6898f2d665d64b998981bc479ddc2306-php-fpm.service-KU8XML/tmp
となります。 Yikes!セキュリティ上問題はありませんが、/tmp
パスをそのまま使用するため、file_put_contents()
が作成したファイルは見つかりません。 PHP関数sys_get_temp_dir()
はちょうど/tmp
を返します。そのパスには環境変数はありません。プログラムでそのパスを取得する方法はありますか?または私はPrivateTmpをオフにする必要がありますか?それとも、私がやるべきことをするためのよりよい方法がありますか?はい、私はワイドオープンパーミッションで私自身の特別な場所を作成することができますが、それはちょうど通常の一時ディレクトリを使用するときれいになるはずです。
ready2goですか? –
'sys_get_temp_dir()'を使うと、ハードコーディングを心配することなくパスを取得するはずです:http://php.net/manual/en/function.sys-get-temp-dir.php –
PHPには、冗談ではないすべての機能があります。 – Havenard