5

tmpfile()やなどの tmp ディレクトリにファイルを作成する関数に問題がありtempnam()ます。それらはすべて tmp への書き込みに失敗し、false を返すようです。upload_tmp_dirphp iniで設定されており、ファイルのアップロードは正常に機能します。

このエラーをデバッグするsys_get_temp_dir()と、tmp ディレクトリの場所を取得することがわかりました。残念ながら、私の PHP バージョン (5.1.6) ではサポートされていません。また、次のメソッドを使用すると、の機能が置き換えられることもわかりましたsys_get_temp_dir()

if ( !function_exists('sys_get_temp_dir')) {
  function sys_get_temp_dir() {
    if (!empty($_ENV['TMP'])) { return realpath($_ENV['TMP']); }
    if (!empty($_ENV['TMPDIR'])) { return realpath( $_ENV['TMPDIR']); }
    if (!empty($_ENV['TEMP'])) { return realpath( $_ENV['TEMP']); }
    $tempfile=tempnam(__FILE__,'');
    if (file_exists($tempfile)) {
      unlink($tempfile);
      return realpath(dirname($tempfile));
    }
    return null;
  }
}

しかし、$_ENV 配列には tmp ディレクトリへの参照がなく、tempnam()前述のように失敗します。

また、open_basedir が設定されていないため、同様の問題が発生する可能性があると聞いています

tmp ディレクトリがどこにあるか、または設定されているかどうかを確認するにはどうすればよいですか?
これは Apache サーバーの構成の問題ですか、それとも PHP の問題ですか?

ご協力いただきありがとうございます

4

6 に答える 6

2

php.ini でアップロード一時ディレクトリを設定できます。次のように動作するはずです。

upload_tmp_dir=/your-www/tmp/

また、php.ini を編集できない場合、またはグローバルに編集したくない場合は、スクリプトの冒頭でこれを使用できます。

ini_set('upload_tmp_dir','/your-home-www/tmp/');
于 2011-06-21T22:19:18.337 に答える
1

TMP、TEMP (および場合によっては TMPDIR) は Windows でのみ有効で、通常はC:\Windows\TEMP. Linux では、デフォルトの一時的な場所は/tmp. これを回避するには (tempnam()関数で動作します)、Web サイト スペース内のどこかに一時フォルダーを作成し、適切なアクセス許可を指定して、これを最初のパラメーターとして上記の関数に渡します。

素晴らしい解決策ではありませんが、何もないよりはましです。

于 2011-06-22T14:01:23.110 に答える
0

私は同じ問題を抱えており、解決策は、Apache の構成を変更して TEMP 変数を PHP に公開することです。この投稿を参照してください。

于 2016-05-23T14:29:14.590 に答える
0

おそらく最もクリーンではありませんが、これは私の古い 5.1.6 インストールで動作します:

function get_temp_path() {
  static $path = null;
  if ($path !== null) return $path;
  $file = tmpfile();
  $meta = stream_get_meta_data($file);
  fclose($file);
  $path = dirname($meta['uri']);
  return $path;
}
于 2014-01-15T23:48:27.687 に答える