Estoy tratando de escribir un archivo a mi directorio /tmp (en un servidor apache) con el php función fopen, pero falla:

<?php
$handle = fopen("/tmp/test.txt", "x");
if ($handle) echo "Success!";
else print_r(error_get_last());
?>

Devuelve el mensaje de error «failed to open stream: No such file or directory». El directorio /tmp tiene los permisos establecidos para drwxrwxrwt y puedo ver que el usuario de la web es la escritura de otros archivos. Misteriosamente, si me punto de la secuencia de comandos a otra carpeta con permisos 777, devuelve éxito. Pero mi open_basedir «no tiene valor». He safe_mode=on y allow_url_fopen=off, pero no creo que debería explicar?

Este es el php 5.3.10 en apache 2.0.

¿test.txt existen?
No, el punto de la secuencia de comandos anterior es para probar si puedo crear archivos en mi carpeta /tmp. He probado el script con el tanto de la ‘x’ y la ‘w’ banderas.
chroot tal vez?
Gracias Robus – eso suena muy posible – el servidor está en un grande, bastante compleja red de la universidad. ¿Cómo puedo comprobar si ese es el problema?
Trate de hacer un «ls -l /tmp» o el equivalente. Estoy iniciando en este tema en Perl, y el directorio /tmp de la secuencia de comandos se está viendo es muy diferente de lo que es en mi directorio /tmp.

OriginalEl autor Anders Sundnes Løvlie | 2012-05-25

3 Comentarios

  1. 35

    Tengo absolutamente el mismo problema. PHP no ha reportado ningún problema con abrir el archivo en /tmp/myoutputfile, pero ningún archivo en la ruta. Luego hice find /-name "myoutputfile" y la encontró en la /tmp/systemd-.../myoutputfile. Google ha encontrado http://blog.oddbit.com/2012/11/05/fedora-private-tmp/. Así que en mi situación es systemd+apache combinación. Espero que esto ayude a alguien.

    Estoy usando CentOS y era una prueba de una secuencia de comandos mediante la escritura de archivos /tmp. Estaba navegando /tmp desde la línea de comandos, y no podía encontrar. Estaban en una systemd-private... carpeta!
    ¿Por qué diablos este comportamiento?
    Es allí una manera de conseguir a partir de PHP el camino de esta «carpeta privada»? (me refiero a llegar «/tmp/systemd-privado-b6fcf4393484blahblah87c822516fdfb-plesk-php70-fpm.servicio-OWpvrW/»)
    Esto es enorme! Provocó un duro para encontrar un error en un Drupal RHEL 6 a RHEL 7 actualización donde el Drupal file_temp_directory fue creado en el directorio /var/tmp/drupal, pero las imágenes estilos fueron, no se genera porque el directorio drupal no había sido creado aún. Una vez que va a una página de administración (por ejemplo, admin/config) donde se hizo el directorio, a continuación, estilos de imagen que se han generado correctamente. Reiniciar el servidor causado el error vuelve a aparecer, pero sólo se dio cuenta de que, en retrospectiva, era increíblemente difícil de reproducir.
    Esto me sorprendió, es ahora también el defecto en la Centos7 versión de apache.

    OriginalEl autor Andrey Kartashov

  2. 0

    De acuerdo con el mensaje de error que aparece, no hay ninguna carpeta /tmp/. Tal vez la carpeta tmp está en otro lugar de la raíz?

    Este error no mostrará si el archivo no existe realmente, ya que se intenta crear.

    Método x también devuelve una advertencia si el archivo ya existe. (doc: http://www.php.net/manual/en/function.fopen.php)

    Creo que esto también va para la otra razón por la que esto podría ir mal, es el usuario que ejecuta PHP no tiene derechos de escritura en el /tmp/ carpeta.

    Como escribí en la pregunta, hay una carpeta llamada /tmp en mi servidor, sí que reside en la raíz, y por lo que puedo decir que el usuario que ejecuta php hace escribir archivos a la carpeta /tmp de forma continua.

    OriginalEl autor Rene Pot

  3. 0

    Intente agregar /tmp a open_basedir. Por ejemplo:

        php_admin_value open_basedir /some/path:/another/path:/tmp

    No estoy seguro de que este es el problema que me encontré, pero encontré tu pregunta, mientras que buscando esta solución, así que supongo que podría ayudar a alguien más.

    OriginalEl autor philippe_b

Dejar respuesta

Please enter your comment!
Please enter your name here