2010-09-21 15 views
6

que estaba usando esta secuencia de comandos básicos:php mkdir() chmod y permisos

$folderPath = "../path/to/$folder/"; 
mkdir("$folderPath"); 

i crear este directorio y luego subir fotos a la misma. He estado haciendo esto durante unos buenos 4-5 meses y de repente comienzo a tener errores 'PROHIBIDOS' cuando intento ver el contenido de la carpeta a través del navegador web

El directorio se está creando igual y las fotos todavía estamos cargando sin ningún problema, pero no puedo acceder a las fotos

he intentado volver a escribir el guión y utilizando chmod para cambiar los permisos pero estoy teniendo ninguna suerte en todos

todas las carpetas de más edad se estaban creando con : -w- rwx rx rx

y no puedo obtener esto recreado

he intentado añadir una línea chmod en mi guión:

$folderPath = "../sales/inventory/$folder/"; 
mkdir("$folderPath"); 
chmod("$folderPath", 0755); 

pero no puedo recrear los mismos permisos, estoy tratando de entender cómo funciona la chmod, pero no puedo encontrar la manera para volver a funcionar correctamente esta función básica

+2

acepta algunas respuestas si quiere que la gente lo ayude – Galen

+0

Este código me pone nervioso, ¿está desinfectando/filtrando '$ folder'? Si no, esa sería mi primera suposición de por qué se detuvo, una potencial violación de seguridad. –

+0

esta no es toda la secuencia de comandos que tengo filtros en $ carpeta – Thomas

Respuesta

9

Intente buscar un archivo HTAccess, donde se mencionará la opción "Opciones -Indices", ya que se utiliza principalmente para no mostrar el contenido de una carpeta en un navegador web . El archivo debe ser buscado en la forma siguiente: -

  • En la carpeta "root_folder/sales/inventory/$folder/", donde "$folder" es como se ha mencionado en el código.
  • Si no lo encuentra, intente en la carpeta "root_folder/sales/inventory /".
  • Si no lo encuentra, intente en la carpeta "root_folder/sales /".
  • Si no lo encuentra, intente en la carpeta "root_folder /".

Al llegar el código de "Opciones -Indexes" escritos en el archivo HTAccess, puede quitar/comentar esa línea de código a partir de ahí, o también puede escribir otro archivo en la carpeta de HTAccess requerido de "$folder ", donde el código será" Índices de Opciones ".

También en la página PHP, la lógica debe ser la siguiente: -

<?php 
$folderPath = "../sales/inventory/$folder/"; 
mkdir("$folderPath"); 
chmod("$folderPath", 0755); 

// Use of "copy()"/"move_uploaded_file()" function here, using some "$targetFile" variable. 
chmod($targetFile, 0755); 
?> 

Esto le ayudará cuando se le desenlazará/borrado de los archivos subidos desde la carpeta "carpeta $".

Espero que ayude.

+0

gracias por la ayuda, esto ayuda, pero sigo teniendo un problema con los permisos reales que reflejan lo que conecto en el guión, por ejemplo su ejemplo funciona bien excepto que cuando miro los permisos desde el árbol de directorios, la $ carpeta creada no es rx rx rx como debería esperarse, sino que sale como rwx rx --- – Thomas

+0

pensándolo bien, simplemente volví a leer lo que dije y debo haber perdido la parte de chmod en los archivos de carga al final, traté de agregar eso al script de carga y funciona bien. Realmente aprecio la ayuda, todo parece estar funcionando bien, por ahora no puedo entender por qué se rompió en primer lugar. – Thomas

+0

@thomas - Es una parte común, que también hice esto mal, cuando yo mismo era un novato. Entonces, ¡nada de qué preocuparse y anímate! ** ¡Lo mejor de la Suerte! ** –

2

Si se encuentra en un entorno compartido, es posible que también desee chown después de la carga, para mayor seguridad. Especialmente si está ejecutando su servidor web con un usuario que no sea su host virtual tiene permiso para acceder (por ejemplo, "nadie" vs "mysite"). Esto es común con los servidores de cPanel, FWIW.

6

Si su variable de $ folder incluye algunos subdirectorios, es posible que sus directorios principales no estén protegidos con los permisos correctos. Este era el problema que estaba teniendo en un servidor OVH Gentoo contratado.

Imagínese que $folder = '/store1/ally23/shelf42'; por lo que su estructura de directorios última es ../sales/inventory/store1/ally23/shelf42, y desea 0777 permisions. lo hace:

mkdir($folderPath, 0777, true) || chmod($folderPath, 0777); 

Sólo el directorio última shelf42 se chmod a 0777. Los directorios intermedios se crean con permisos predeterminados (en mi caso 0744).

No existe una opción recursiva en el comando chmod de PHP, por lo que debe recorrer los directorios intermedios y modificarlos de manera individual.

+0

Intenté 'mkdir ($ folderPath, 777)' y no funcionó. Me di cuenta de que era debido a [permisos incorrectos] (http://digitalfortress.tech/php/difference-file-mode-0777-vs-777/). Solo como una nota, el 0 que precede al 777 es muy importante. –