Pregunta

Estoy tratando de crear un archivo con PHP aquí está mi código:

$file_to_send = 'ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

Esto me da claramente un error, ya que estoy tratando de establecer permisos en un archivo que no existe todavía. Aunque si me salto la llamada chmod consigo que me dice un otro error que no tengo permisos establecidos. Así que, o estoy en un pollo enfermo vs ciclo de huevo o tengo que configurar los permisos en el directorio que contiene ... pero ¿cómo? se trató toda la folling:

chmod('../containingfolder/', 0777);
chmod('../', 0777);
chmod('', 0777);

Nada de lo cual el trabajo ... ¿qué debo hacer? Ah, y por cierto una vez que he terminado necesito para cambiar los permisos de vuelta?

Gracias!

Actualizar Probé chmod (, 0777 '') y este es el error que tengo:

Warning: chmod(): Operation not permitted

La única razón por la que estoy tratando de hacer que este archivo es para que pueda FTP en otro lugar, a continuación, había planeado para desvincular () de ella. Así que si hay una manera mejor? Al igual que el almacenamiento puede que el archivo en la memoria para enviarlo (no sé si eso es posible)? También estoy usando PHP 4. Gracias!

¿Fue útil?

Solución

Crear un directorio fuera de la raíz del documento que llamaremos $tmpFolder asegurarse de que el usuario que el servidor web se ejecuta como tiene permisos de lectura / escritura a la misma. A continuación, lo siguiente:

$file_to_send = $tmpFolder . '/ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

Otros consejos

También podría ser que el servidor Apache en marcha (si es Apache) no tiene acceso para cambiar los permisos en ese directorio. Podría tener root / root como usuario / grupo y Apache se ejecuta en Apache Group o wwwuser o algo más.

Hacer una ls -l en el directorio padre y ver qué usuario y grupo tiene acceso a esta carpeta.

Para cambiar el permiso del directorio actual, utilice

chmod('.', PERMISSION);

¿Usted realmente necesita 0777, es decir mundo lectura y escritura? Parece muy laxa a mí!

Editar : Tu sugerencia chmod ( '../ containingfolder /', 0777); debería haber trabajado demasiado. ¿Puede ser más detallado en los errores que recibe?

No se pueden establecer los permisos de una entrada si el usuario que ejecuta PHP no puede modificarlo. Mira de configuración de Apache, buscar el usuario se está ejecutando con (por defecto es www-data). Para evitar esto en el futuro, fijarse al mismo grupo como grupo por defecto, y darle documento chmod -R root g + a

Si el usuario actual puede escribir en el directorio, usted debería ser capaz de simplificar todo esto con file_put_contents().

<?php
$file = 'file_to_write.txt';
$data = "Tab\tseparated\tvalues\nMore\tseparated\tvalues";
file_put_contents($file);

Si usted no tiene permisos para escribir en el directorio actual (o cualquier directorio) que no será capaz de crear el archivo, y mucho menos que chmod.

Si usted puede publicar los errores que recibe de sus comandos chmod(), eso ayudaría.

chmod('.',0777);

debería funcionar.

Si desea mantener la jaula chroot, pero todavía necesitan los privilegios a chmod el directorio actual, vas a tener que encontrar la manera de usar sudo con la opción -S y el tubo de la contraseña de root para STDIN con el fin para obtener los privilegios.

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