2013-05-04 15 views
5

I provando creare una nuova cartella utilizzando PHP localhost/PhpProject3/create.php:PHP non creare la cartella mkdir()

<?php mkdir('newdir', 0777); ?> 

ma questo codice non lo fa. Inoltre non funziona:

<?php mkdir('/var/www/PhpProject3/newdir',0777); ?> 

Ho installato LAMPADA. Penso che il problema sia nelle impostazioni (forse chmod?) Perché lo script PHP funziona. Per esempio ho creare semplici test.php:

<?php echo 'Great'; ?> 

ed eseguirlo: localhost/PhpProject3/test.php il risultato è grande.

Uso Netbeans. Ecco i file:/var/www/PhpProject3. l'eseguo: localhost/PhpProject3/... Il contenuto di/etc/apache2/sites-available/default:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www 
    <Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
    </Directory> 
    <Directory /var/www/> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride None 
     Order allow,deny 
     allow from all 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
     AllowOverride None 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
     Order allow,deny 
     Allow from all 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
     Options Indexes MultiViews FollowSymLinks 
     AllowOverride None 
     Order deny,allow 
     Deny from all 
     Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 

</VirtualHost> 

anche io non riesco a creare file usando touch().

Qualcuno può aiutarmi?

+0

Molto probabilmente non ti è permesso scrivere lì, i server web non sono generalmente autorizzati a scrivere nelle directory o nei file che servono (per una buona ragione). Se hai bisogno di una directory scrivibile, dovrai fare esplicitamente un chmod per consentire al web server di scrivere lì. Basta non farlo sulla radice del server, ma come specifica una sottodirectory che puoi. –

risposta

9

Quale utente esegue il server web come? Si può vedere che se si scrive

ps aux 

e dare un'occhiata. Probabilmente è l'utente www-data (se usi ubuntu).

Quindi chownare la directory per quell'utente e assegnare all'utente le autorizzazioni di scrittura alla directory.

chown www-data/var/www/PhpProject3

e

chmod u + w/var/www/PhpProject3

Un'alternativa è quella invece usa le autorizzazioni di gruppo.

chgrp www-data/var/www/PhpProject3

e

chmod g w/var/www +/PhpProject3

assumendo il server web viene eseguito come gruppo www-data.

+0

Buon lavoro! Grazie – user1518451

+0

Funziona ma non riesco a creare un nuovo file php in Netbeans. Come posso cambiare chmod per creare, eliminare e modificare file senza permessi di root? – user1518451

+0

Non possibile se non si è root, è possibile rendere la directory interamente scrivibile se si ha il coraggio, il suo chmod a + il loro –

2

Difficile da indovinare qual è davvero il problema, presumo permissoni o problemi di percorso. Si dovrebbe controllare il valore di ritorno di mkdir():

if(!mkdir()) { 
    print_r(error_get_last()); 
} 

Inoltre si dovrebbe imparare abilitare i messaggi di errore. mkdir() ne innescherebbe uno se fallisce. Sono disabilitati di default in quanto potrebbe essere un rischio per la sicurezza in un sistema di produzione. Ma quando si sta sviluppando è necessario abilitare . È possibile attivare nel php.ini del sistema di sviluppo:

php.ini:

... 
display_errors=1 
... 
log_errors=1 
... 
error_log="/path/to/writable/file" 
... 
error_reporting=E_ALL 

Dopo aver modificato il php.ini non dimenticate di riavviare il server web.

-2

v'è una posizione temporanea privata in CentOS 7 che è molto fastidioso a volte con php in particolare il comando mkdir

Per disattivare questo comportamento, è possibile impostare PrivateTmp = false in/usr/lib/systemd/system/httpd .service

quindi daemon di systemctl-ricarica; systemctl restart httpd

HTH.