function temp_dir($default = false) { global $ptmp, $prefix; if ($default) { if (!@is_dir($default)) { if (!mkdir_p($default)) { return false; } } /* try it really, is_writable is buggy with openbasedir */ $fh = @fopen(realpath($default) . "/test", "wb"); if ($fh) { $ptmp = $default; return true; } else { $ptmp = "failed"; return false; } } $_temp = false; if (WINDOWS) { if (my_env('TEMP')) { $_temp = my_env('TEMP'); } elseif (my_env('TMP')) { $_temp = my_env('TMP'); } elseif (my_env('windir')) { $_temp = my_env('windir') . '\\temp'; } elseif (my_env('SystemRoot')) { $_temp = my_env('SystemRoot') . '\\temp'; } // handle ugly ENV var like \Temp instead of c:\Temp $dirs = explode("\\", realpath($_temp)); if (strpos($_temp, ":") != 1) { unset($_temp); $_dirs = array(); foreach ($dirs as $val) { if ((bool) $val) { $_dirs[] = str_replace("/", "", $val); } } unset($dirs); $dirs = $_dirs; array_unshift($dirs, "c:"); $_temp = $dirs[0]; for ($i = 1; $i < count($dirs); $i++) { $_temp .= "//" . $dirs[$i]; } } $ptmp = $_temp; } else { $_temp = my_env('TMPDIR'); if (!$_temp) { if (is_writable('/tmp')) { $_temp = '/tmp'; } } } // If for some reason the user has no rights to access to // the standard tempdir, we assume that he has the right // to access his prefix and choose $prefix/tmp as tempdir if (!$_temp) { print "System's Tempdir failed, trying to use \$prefix/tmp ..."; $res = mkdir_p($prefix . '/tmp'); if (!$res) { bail('mkdir ' . $prefix . '/tmp' . ' ... failed'); } $ptmp = $prefix . '/tmp'; $_temp = tempnam($prefix . '/tmp', 'gope'); rm_rf($_temp); mkdir_p($_temp, 0700); $ok = @chdir($ptmp); if (!$ok) { // This should not happen, really ;) bail('chdir ' . $ptmp . ' ... failed'); } print "ok\n"; // Adjust TEMPDIR envvars if (!isset($_ENV)) { $_ENV = array(); } $_ENV['TMPDIR'] = $_ENV['TEMP'] = $prefix . '/tmp'; } else { $_temp = tempnam($_temp . '/tmp', 'gope'); } $temp_dir = $ptmp = $_temp; return true; }
function tmp_dir() { if (WINDOWS) { if (my_env('TEMP')) { $_temp = my_env('TEMP'); } elseif (my_env('TMP')) { $_temp = my_env('TMP'); } elseif (my_env('windir')) { $_temp = my_env('windir') . '\\temp'; } elseif (my_env('SystemRoot')) { $_temp = my_env('SystemRoot') . '\\temp'; } // handle ugly ENV var like \Temp instead of c:\Temp $dirs = explode("\\", realpath($_temp)); if (strpos($_temp, ":") != 1) { unset($_temp); $_dirs = array(); foreach ($dirs as $key => $val) { if ((bool) $val) { $_dirs[] = str_replace("/", "", $val); } } unset($dirs); $dirs = $_dirs; array_unshift($dirs, "c:"); $_temp = $dirs[0]; for ($i = 1; $i < count($dirs); $i++) { $_temp .= "//" . $dirs[$i]; } } $ptmp = $_temp; return $_temp; } if (my_env('TMPDIR')) { return my_env('TMPDIR'); } return '/tmp'; }