usuarios tiene que pueden permisos los editar archivos archivo php fopen tmp php-safe-mode

php - tiene - permisos wordpress linux



No se puede escribir en/tmp con php, a pesar de los permisos 777 y ningĂșn valor open_basedir (3)

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

Este error no se mostrará si el archivo realmente no existe, ya que intentará crearlo.

El 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 se debe a otra razón por la que podría salir mal, porque el usuario que ejecuta PHP no tiene derechos para escribir en la carpeta /tmp/ .

Estoy intentando escribir un archivo en mi directorio / tmp (en un servidor apache) con la función php fopen, pero falla:

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

Esto devuelve el mensaje de error "no se pudo abrir la transmisión: no existe tal archivo o directorio". El directorio / tmp tiene los permisos establecidos en drwxrwxrwt y puedo ver que el usuario web está escribiendo otros archivos en él. Misteriosamente, si apunto el script a otra carpeta con permisos 777, devuelve el éxito. Pero mi open_basedir no tiene "valor". Tengo safe_mode = on y allow_url_fopen = off, pero no creo que eso deba explicarlo.

Esto es PHP 5.3.10 en Apache 2.0.


Intenta agregar /tmp a open_basedir . Por ejemplo:

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

No estoy seguro de que este sea el problema al que realmente te enfrentaste, pero encontré tu pregunta mientras buscaba esta solución, así que supongo que eso podría ayudar a alguien más.


Tengo absolutamente el mismo problema. PHP no reportó ningún problema al abrir el archivo en /tmp/myoutputfile , pero no hay ningún archivo en esa ruta. Luego find / -name "myoutputfile" y lo encontré en /tmp/systemd-.../myoutputfile . Google encontró http://blog.oddbit.com/2012/11/05/fedora-private-tmp/ . Así que en mi situación es una combinación de systemd + apache. Espero que esto ayude a alguien.