Imaginé PHP a cambiar el nombre iba a ser mi mejor apuesta. No veo muchos ejemplos sobre cómo utilizar direcciones Url relativas en ella, aunque, así que tipo de peligro. De cualquier manera, esto me da permiso denegado:

Yo quiero hacer esto:

$file = "../data.csv";
rename("$file", "../history/newname.csv");

Donde ../ por supuesto volvería 1 directorio desde donde el script que está siendo ejecutado. No podía encontrar una manera…así que hice este lugar:

$file = "data.csv";
$path = dirname(realpath("../".$file));
rename("$path/$file", "$path/history/newname.csv");

Sin embargo estoy recibiendo permiso denegado (sí, el de la historia de la carpeta es propiedad de www-data, y sí de los datos.csv es propiedad de www-data). Pensé que era extraño, así que he intentado una simple prueba:

rename( 'tempfile.txt', 'tempfile2.txt' );

y me aseguré de www-data pleno control sobre tempfile.txt…todavía tengo permiso denegado. Por qué? ¿el archivo de su cambio de nombre se han de existir? no se puede cambiar el nombre como linux del mv? Así que en lugar de simplemente copiar() y unlink()?

OriginalEl autor ParoX | 2010-07-25

2 Comentarios

  1. 5

    Para mover un archivo desde «../» a «../historia/», un proceso que necesita permiso de escritura para ambos «../» y «../historia/».

    En tu ejemplo, que está, obviamente, carecen de permiso de escritura para «../». Los permisos para el archivo se mueve no son relevantes, por el camino.

    OriginalEl autor Marc Donges

  2. 2

    No sólo la propiedad juega un papel importante, pero también los permisos de archivo. Asegúrese de que los permisos están configurados correctamente en el archivo de origen y el directorio de destino (por ejemplo,chmod 644 data.csv).

    Es www-data el mismo usuario como Apache?

    Edición: cuidar de proporcionar existente, rutas absolutas a realpath(). También tenga cuidado con lo siguiente:

    $path = dirname(realpath("../".$file));

    Esto podría producir nada, porque el archivo ../data.csv podría no existir. I. e., el resultado de realpath() en un archivo que no existe es false.

    Aquí un poco de código que podría funcionar mejor para usted:

    $file = "data.csv";
    $path1 = realpath($file);
    $path2 = realpath(dirname($file).'/..').'/history/newname.csv';
    rename($path1, $path2);

    Usted debe ser extremadamente cuidadoso que $file no puede ser editado por el visitante, porque él podría cambiar una solicitud de manipular que el archivo cambia de nombre a donde.

    En realidad 644 sería mejor, desde un archivo CSV no debe ser ejecutable.
    sí, el chmod es 644, incluso traté de 777 para llegar a trabajar. No hay nada de trabajo. y apache es www-data, lo sé porque puedo mover otras cosas y necesitaba www-data, además he comprobado la parte superior.
    La ruta completa de acceso a datos.csv será /var/imvu/productos/ht/clientes/prueba/de datos.csv donde /var/ es propiedad de root, imvu, a través de la prueba es de titularidad de wwwftp (ftp que he hecho así que no me ftp a la raíz). También como he dicho, el directorio donde se va (la historia) es propiedad de www-data.
    Podría ser que el archivo está en uso? Puede cambiar el nombre como administrador?
    Podría haber sido eso, pero el archivo de prueba que he realizado, tempfile.txt fue creada por mí en la raíz (nunca abierto por cualquier cosa) , en la que luego me chmod a 777 y, a continuación, chowned a www-data…todavía no cambiar el nombre.

    OriginalEl autor Paul Lammertsma

Dejar respuesta

Please enter your comment!
Please enter your name here