Pregunta

Espero un problema con la función PHP fwrite()

$filename = 'rss.xml';  

if (file_exists($filename)) {
    echo "The file $filename exists";
} 

if (is_writable($filename)) {
    $fp = fopen($filename, 'w');
    fwrite($fp, $feed);
    fclose($fp);
 }
else{
    echo '<br />not writable..';
    if(!is_readable($filename)){
    echo ' and not readable!';
    }
}

Una vez ejecutado el script regresa:

The file rss.xml exists
not writable.. 

chmod para rss.xml es 755 y el modo seguro está desactivado.

Estoy alojado en (mt) mediatemple.com en un (dv) y el script funcionaba bien cuando estaba alojado en una solución (gs).

No puedo encontrar lo que está mal =/

¿Fue útil?

Solución

CHMOD 0755 medios de que el propietario del archivo sólo puede escribir en él (grupo y otros pueden leer y ejecutar). Debe cambiar CHMOD a 0775 o incluso 0777 en función del grupo de un usuario de PHP /.

Otros consejos

medios 755:

  • rwx: lectura, escritura, ejecución para el propietario
  • r-x: lectura, ejecución para el grupo
  • r-x: lectura, ejecución de los demás

Por lo tanto, todo el mundo puede leer (y ejecutar) ese archivo, pero sólo el propietario puede escribir en él.

Tal vez el usuario al que pertenece el archivo no es el que se ejecuta el script PHP? es decir, el archivo podría pertenecer a cualquiera, mientras que el guión está siendo dirigido por el usuario de Apache (a menudo www-data)


Una primera idea podría ser la de eliminar el archivo, deje que su script de tratar de volver a crearlo; Si se trata de re-creado correctamente (lo que significa que Apache tiene el derecho requiere write en el directoy que lo contiene) , debería ser capaz de modificarlo, después de eso.

Si no, usted debe tratar de dar el privilegio write a other - si su guión está siendo dirigido por otro usuario que el propietario del archivo; chmod o+w rss.xml debe hacer el truco.

755 significa que el propietario del archivo puede modificarlo, pero no cualquier otra persona. El propietario no es probable que el servidor web, pero usted mismo (su cuenta de FTP?), Por lo que PHP no puede modificarlo. Trate de darle persmissions más amplios. Comience con 775 y si eso no funciona, intente 777.

Hay algunos servidores de Internet que se ejecuta el servidor web como el mismo usuario que su cuenta de FTP para que no se consiguen las preguntas de soporte con respecto a los permisos de archivo, pero en mi opinión esto es un gran agujero de seguridad. Creo que Mediatemple hace lo correcto al no ejecutar el servidor web como su cuenta FTP.

Editar:Pasé por alto que, como señalan Pascal Martin y otros, 755 puede significar que el archivo legítimamente no se puede escribir y es posible que tenga que 777 cambiarlo o cambiar de propietario.Dejo esta respuesta en su lugar en caso de que todo esté configurado correctamente y is_writable() aún devuelva falso, que es lo que estaba asumiendo.

Extraño.Hay una breve discusión sobre esto en el is_writable Notas aportadas por el usuario.Para el tipo que publica allí, cambiar a PHP 5 lo resolvió (aunque sospecho que es un problema de servidor/PHP/qué proceso se ejecuta según qué usuario).

Lo que podrías probar:

  • Descubra qué usuario utiliza PHP posix_getuid()
  • Cambie el propietario del archivo en el que está intentando escribir a ese usuario exacto (no sólo el grupo)
  • Si funciona entonces, tal vez sea realmente algún tipo de problema técnico y es posible que tengas que pensar en probar fopen() e interceptar su mensaje de error si falla.

Y por supuesto:¿El archivo realmente se puede escribir () cuando se omite la verificación?

En diferentes hostings PHP se ejecuta y accede a archivos ya sea como

DUEÑO o

GRUPO o

MUNDO

La primera variante es la mejor para su seguridad.

En ese caso, debe configurar los permisos de archivo en 644, en el último caso, 666.

¿Por qué configurar 777 y hacer que el archivo sea ejecutable si solo almacena datos allí?

Hacer una carpeta para la celebración de sus archivos con el permiso 0777 y luego poner sus archivos en ella con un nivel de permisos bajo 0644. Así que cada cuerpo tiene acceso a la carpeta, pero no todo el mundo puede cambiar los archivos (0644) = Eso es lo que he encontrado la mejor solución. La otra solución es menos seguro no hacer una carpeta y sólo cambiar su permiso a 666 o algunas personas prefieren = 777 no es una buena solución segura

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top