El siguiente script de PHP no puede crear el directorio. También fallará para crear el archivo (si el directorio ya existe).

ini_set('error_reporting', E_ALL);

define('ABSPATH', $_SERVER['DOCUMENT_ROOT']);
echo ABSPATH . '<br /><br />';

$dir_to_make = ABSPATH . '/aaatest';
$file_to_make = ABSPATH . '/aaatest/aaatest.txt';

echo umask() . '<br />';

mkdir($dir_to_make) or die('could not create directory');
fopen($file_to_make) or die('could not open/create file');

La umask() devuelve un valor de 18. La raíz del documento tiene un período en que ( /var/www/bla/websitename.com/httpdocs ).

Yo no entiendo completamente umask(), ni estoy seguro de cómo usarlo correctamente. No sé si es ese el problema o no, pero parece ser probable. Debo cambiar el umask, cree el archivo/directorio, a continuación, volver a cambiarlo? ¿Qué debe hacer el umask ser cambiar/hacer/editar los archivos/directorios? Si el servidor se configura de manera diferente?

¿cuál es el mensaje de error que php está generando? si no puede imprimir en la secuencia html, entonces será en el registro del servidor.
PHP Advertencia: mkdir() [<a href=’función.mkdir’>la función.mkdir</a>]: Permiso denegado en /var/www/blah/websitename.com/httpdocs/aaa.php en la línea 13
También debo agregar que en este servidor, en la misma cuenta, tengo una instalación completa de WordPress, que está funcionando bien (la carga de archivos, actualización de plugins, etc).
ah, sí – su proceso de PHP no tiene permisos de escritura para crear el directorio (véase mi respuesta a continuación). Primero debe hacer 100% seguro que se pasa la ruta de acceso correcta a mkdir. Si usted ha confirmado que está utilizando la ruta de acceso correcta, entonces definitivamente tienes un problema de permisos, tendrás que conceder los permisos necesarios en el directorio raíz de los documentos, por lo que su proceso de php puede escribir en él. Si usted no tiene administrativo privs en su servidor, entonces esto puede ser una tarea para un sistema de administración.
wordpress (probablemente) requieren que PHP pueda escribir en doc_root. Así que me gustaría confirmar que su $dir_to_make y $file_to_make contengan las cadenas que pensar que hacer. imprimir como este, así que no hay confusión: echo "[{$dir_to_make}]"

OriginalEl autor matthewpavkov | 2010-10-31

2 Comentarios

  1. 6

    Con el fin de crear un archivo dentro de la raíz del documento, su proceso de PHP debe tener permisos de escritura para el directorio. Por lo general (pero no siempre) de PHP se ejecuta como el mismo usuario que el servidor web se ejecuta como. El nombre de este usuario va a variar con diferentes sistemas. En Ubuntu y Debian, el usuario se llama www-data, en otros sistemas puede ser simplemente www, o apache, o apache2. En algunos sistemas, puede ser root.

    Usted puede averiguar lo que el usuario de PHP se ejecuta como examinando el valor de el servidor superglobal: $_SERVER['USER']. phpinfo() proporciona una manera fácil mirar cosas como esta. Normalmente, el usuario de PHP es el mismo que el usuario del servidor web (pero no siempre).

    configuración del directorio de la propiedad y los permisos es otro tema completamente – depende de qué sistema operativo estás, lo que el acceso y los permisos que tiene para el servidor, y un montón de otras cosas. Si necesita consejos sobre esto, puede que inicio en serverfault.com.

    buena suerte.


    [editar] OK, si estás ejecutando como apache, y usted está tratando de crear su nuevo directorio en /var/www/blah/mydomain.com/htdocs/… entonces al ejecutar:

    > ls -splad /var/www/blah/mydomain.com/htdocs

    se esperaría ver algo como:

    4 drwxr-xr-x 2 apache apache 4096 2010-07-22 20:54 /var/www/blah/mydomain.com/htdocs/

    hay dos puntos interesantes:

    drwxr-xr-x significa: d = directorio; rwx = el usuario ha de Leer,Escribir,ejecutar; r-x = grupo tiene sólo Leer y ejecutar; r-x = todo el mundo tiene sólo Leer y ejecutar.

    y apache apache – la primera es el nombre del usuario que posee el archivo/directorio, el segundo es el nombre del grupo al que pertenece el archivo/directorio.

    así que si usted vio algo como esto:

    4 drwxr-xr-x 2 root apache 4096 2010-07-22 20:54 /var/www/blah/mydomain.com/htdocs/

    sería no trabajo porque el directorio es propiedad de root (no de apache), y aunque es agrupadas por apache, el directorio no es grupo-escritura para que no se corte. En este escenario, usted podría simplemente agregar grupo de escribir perms (chmod g+w /var/www/blah/mydomain.com/htdocs), y ya está bueno para ir.

    Algo que podemos ver es:

    4 drw-r-xr-x 2 apache apache 4096 2010-07-22 20:54 /var/www/blah/mydomain.com/htdocs/

    En este caso, la propiedad está bien, pero el directorio no es escribible por su propietario. Usted puede solucionar este problema mediante la adición de permiso de escritura para el propietario chmod u+w /var/www/blah/mydomain.com/htdocs.

    hay un montón de otras variaciones, pero tal vez esto ayude.

    Sí, está funcionando como apache.
    ok, véase mi reciente edición de información específica para el usuario apache
    ah, y el umask no importa que controla los permisos que se le dará, por defecto, a los directorios de crear. Pero no el control de si o no usted puede crear un directorio o archivo. Centrarse en conseguir su secuencia de comandos para crear el directorio dentro de la doc-raíz. una vez que usted tiene que trabajar, a continuación, añadir la creación del archivo. Si se puede crear el directorio, pero entonces usted no puede crear el archivo, a continuación, vamos a hablar de umask. 😉
    Ok, creo que no ayuda. Yo no soy un admin de este server, por lo que no puede ssh, etc., sin embargo, puedo ir lo suficientemente alto en la estructura de directorios para ver que la carpeta htdocs es de titularidad de la cuenta de usuario (websitename) (También, el grupo de htdocs no es apache) con rwx r-x —. Así que, ya que php se ejecuta como apache (y es el grupo apache demasiado, estoy bastante seguro), entonces no sería capaz de escribir en htdocs? Es eso correcto?
    sí, eso es correcto. Cuando usted tiene una configuración como esta (donde el htdocs dir es propiedad de un usuario que corresponde a la vhost — websitename en su caso)… en este tipo de configuración, normalmente uno espera encontrar ejecutar php como CGI (o fastcgi). Mediante el acuerdo, apache se ejecuta como su propio usuario (por ejemplo. apache), mientras que suexec se utiliza para permitir que php se ejecuta como el vhost de usuario (por ejemplo. websitename) — permitiendo php para tener acceso de escritura a los directorios necesarios. Si esto no es lo que está sucediendo en su servidor, usted puede ser que desee tener una conversación con su administrador de sistemas.

    OriginalEl autor Lee

  2. 2

    Que usted necesita para el suministro de 2 argumentos a fopen.
    Pruebe a cambiar

    fopen($file_to_make) or die('could not open/create file');

    a

    fopen($file_to_make,'w') or die('could not open/create file');
    No, esto no funciona.
    Compruebe los permisos del directorio.

    OriginalEl autor lbedogni

Dejar respuesta

Please enter your comment!
Please enter your name here