2011-06-21 18 views
5

Tengo problemas con las funciones que crean archivos en el directorio tmp como tmpfile() y tempnam(). Todos parecen no escribir en tmp y devuelven falso. upload_tmp_dir está configurado en php ini y las cargas de archivos funcionan bien.PHP No se puede encontrar el directorio tmp

Al depurar este error encontré que sys_get_temp_dir() tiene la ubicación del directorio tmp lamentablemente no es compatible con mi versión de PHP (5.1.6). También vi que utilizando el siguiente método reemplaza la funcionalidad de 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; 
    } 
} 

Pero no hay ninguna referencia a un directorio tmp en el array $ _ENV y tempnam() falla como he mencionado antes.

también open_basedir no se establece lo que he oído pueden causar problemas similares

¿Cómo puedo saber dónde está el directorio tmp es o si incluso se establece?
¿Es este un problema de configuración del servidor apache o uno de PHP?

Gracias por su ayuda

+1

Compruebe su php.ini. Deberías encontrar el directorio allí. – Colum

+1

¿cómo se llamaría? gracias – DonutReply

+0

Hay diferentes variables. Encontré el directorio bajo upload_tmp_dir y session.save_path. Pero el valor predeterminado de PHP es/tmp – Colum

Respuesta

1

TMP, TEMP (y tal vez TMPDIR) son válidos sólo en Windows y por lo general poi nting a C:\Windows\TEMP. La ubicación temp predeterminada de Linux es /tmp. Para solucionarlo (funciona con la función tempnam()), puede crear una carpeta temporal en algún lugar dentro del espacio de su sitio web, especificar los permisos de acceso adecuados y pasarlo como primer parámetro a la función anterior.

No es una gran solución, pero es mejor que nada.

2

puede establecer el directorio temporal de subida en su php.ini - algo así debería funcionar:

upload_tmp_dir=/your-www/tmp/ 

Además, en caso de que no se puede editar el php ini o no quieren hacerlo, puedes utilizar esto en el comienzo de su script:

ini_set('upload_tmp_dir','/your-home-www/tmp/'); 
0
Probablemente no

el más limpio, pero esto funciona en mi antiguo 5.1.6 instalar:

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; 
} 
0

tengo el mismo problema y la solución es cambiar la configuración de Apache para exponer la variable TEMP para PHP, consulte this post .

0

Sugerencia para los novatos como yo: PIENSE que PHP no podía mover cosas de mi carpeta temporal, pero estaba confundido por las posiciones relativas de las carpetas. Esto puede aplicarse a otra persona, así que lo explicaré, aunque está muy relacionado con esta pregunta específica (porque esta pregunta específica es un posible resultado de búsqueda para otras personas como yo, que son novatos).

Mi problema es que estaba repitiendo un formulario de carga DESDE un archivo functions.php dentro de/var/www/html/TO a un archivo profile.php en/var/www/html/user/que LLAME a uploadphoto. archivo php en/var/www/html /. Los archivos cargados finalmente fueron destinados a aterrizar en/var/www/html/uploads. Esto finalmente significó que la mayoría de mis referencias a uploadphoto.php AND uploads/in functions.php se escribieron "../uploadphoto.php" o "../uploads/[etc.jpg]", respectivamente, para avanzar volver a html/desde html/user/(donde el código echoed aterrizó en html/user/profile.php). Esto me llevó a usar intuitivamente el siguiente comando dentro de uploadphoto.php sin pensarlo:

move_uploaded_file($_FILES["file"]["tmp_name"][0], "../uploads/$filename") 

¿Ves el problema? uploadphoto.php está en el mismo directorio que uploads /, así que no necesitaba el ../ aquí. Durante horas, estaba seguro de que estaba volviendo a perder los permisos de mi carpeta porque soy nuevo en la carga de imágenes. Me olvidé de buscar errores más simples. Espero que esto ayude a alguien más.

Cuestiones relacionadas