restrizione open_basedir in vigore. Il file (/) non rientra nei percorsi consentiti:


89

Ricevo questo errore durante il caricamento di un avatar sul mio sito. Non l'ho mai ricevuto prima e di recente non è stato cambiato nulla per iniziare a ricevere questo errore ...

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):

19
Hai accettato una risposta non funzionante.
sjas

Risposte:


-23

Modificare le open_basedirimpostazioni nella configurazione PHP (vedere Configurazione runtime ).

L' open_basedirimpostazione viene utilizzata principalmente per impedire agli script PHP di un determinato utente di accedere ai file nell'account di un altro utente. Quindi, di solito, qualsiasi file nel tuo account dovrebbe essere leggibile dai tuoi script.

Impostazioni di esempio tramite .htaccessse PHP viene eseguito come modulo Apache su un sistema Linux:

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

2
@Nikesh Questo mi ha dato un errore 500 dopo ho fatto cadere nelle mie .htaccces e cambiato i percorsi a: /my/cutsom/dir/. Non so perché pensato.
hitautodestruct

79
Fantastico, 12 voti positivi finora per una risposta errata. Non è possibile utilizzarlo php_admin_valuenei .htaccessfile . Non è possibile utilizzare DirectoryMatch nei file .htaccess . (Che tipo di misura di sicurezza sarebbe open_basedirse potesse essere disabilitata?)
Álvaro González

1
@eoinoc - Scorri verso il basso e vedi ad esempio la risposta di Andrei. Oppure modifica il file php.ini globale.
Álvaro González

19
NON METTERE QUESTO NEL TUO HTACCESS! MA ANCORA NEL TUO FILE DI CONFIG DI APACHE.
fino al

8
Includere la directory root in open_basedir vanifica completamente lo scopo di open_basedir. Questa soluzione "funziona" solo nel senso che essenzialmente disabilita la restrizione.
Martin

118

Modifica le impostazioni di open_basedir nel tuo account di hosting e impostale su nessuno. Trova l'impostazione open_basedir fornita nell'area "Impostazioni PHP" del tuo Plesk / cPanel. Impostalo su "nessuno" dal menu a discesa fornito. Li ho mostrati nell'immagine del pannello di Plesk.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


1
@yogihosting dopo aver eseguito questa operazione ho ricevuto un errore - Impossibile individuare il modello specificato: Home_model
Heemanshu Bhalla

1
Un po 'tardi per questo, ma c'è un modo per farlo per tutti i siti plesk? L'ho impostato su nessuno nel php.ini globale per la versione che i siti stanno utilizzando: gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 Ma continuano a ricevere l'errore.
Matt Cowley

@ MattCowley devi farlo per ogni sito ospitato nel pannello di plesk.
yogihosting

1
Grazie per questa soluzione! Questo funziona perfettamente per me su hosting condiviso!
Smilefounder

38

Per risolvere questo errore, è necessario modificare il file httpd.conf. Molto prima può essere visto in phpinfo nella sezione direttiva Server Root di apache2handler. Ad esempio, nel mio caso in questo modo - / etc / httpd / httpd.conf. Apri il file httpd.conf, trova la menzione del parametro open_basedir. E impostalo su nessuno. ( php_admin_value open_basedir nessuno )


L'impostazione su "nessuno" ha funzionato per me, utilizzando anche un'interfaccia di Plesk.
diggersworld

10
Ho trovato la open_basedirconfigurazione nel mio file php.ini. (Arch Linux su Raspberry Pi con php 5)
Dennis van der Schagt

2
L'ho trovato anche nel mio php.ini (anche Arch). Commenta la riga per ottenere lo stesso effetto di questa risposta.
Ben Elgar

@ BenElgar solo commentando la linea ha menzionato i lavori, sto solo chiedendo se ci sono rischi lì
mwangaben

6

Se stai eseguendo questo con php file.php. È necessario modificare php.ini Trova questo file:

: locate php.ini
/etc/php/php.ini

E aggiungi il percorso del file alla open_basedirproprietà:

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected


Questa è l'unica soluzione che punta a più percorsi specifici invece di saltare del tutto la sicurezza.
mvreijn

5

Per me il problema era un valore di configurazione errato / mancante per il server Plesk che esegue l'intera operazione. Ho appena seguito le indicazioni qui: http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/

È possibile configurare PHP per avere un file di registro degli errori separato per ciascuna definizione di VirtualHost. Il trucco sta nel sapere esattamente come impostarlo, perché non puoi toccare la configurazione direttamente senza interrompere Plesk. Ogni nome di dominio sul tuo (dv) ha la sua directory in / var / www / vhosts. Una directory tipica ha le seguenti directory di primo livello:

cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on

Ti consigliamo di creare un file vhost.conf nella cartella conf / della directory del dominio con le seguenti righe:

php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on

Cambia il primo valore in modo che corrisponda alla tua installazione effettiva (ho usato /tmp/phperrors.log). Dopo aver modificato il file vhost.conf, prova la configurazione dalla console con:

apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…

/etc/init.d/httpd configtest

E infine dì a Plesk che hai apportato questa modifica.

/usr/local/psa/admin/bin/websrvmng -a

2

Il percorso a cui ti riferisci non è corretto e non fa parte della directoryRoot del tuo spazio di lavoro. Prova a creare un percorso assoluto per il file a cui desideri accedere, dove ora probabilmente stai utilizzando un percorso relativo ...


Utilizza un percorso assoluto. Funziona per tutti gli utenti tranne questo.
Webnet

2

se hai questo tipo di problema con ispconfig3 e hai un errore come questo

restrizione open_basedir in vigore. Il file (/ var / www / clients / client7 / web15) non rientra nei percorsi consentiti: .........

Per risolverlo (nel mio caso), imposta PHP su SuPHP nel pannello del sito Web di ispconfig3

Spero che aiuti qualcuno :)


2

Ho avuto questo problema su uno dei miei siti wordpress dopo l'aggiornamento e / o lo spostamento :)

Controlla nella tabella del database 'wp_options' il 'upload_path' e modificalo correttamente ...


a che valore l'hai impostato? / [... ]/public_html/wp-content/uploads?
brett

1

Se utilizzato ispconfig3:

Vai alla sezione Sito web -> Opzioni -> PHP open_basedir:

inserisci qui la descrizione dell'immagine

  • In questo campo sono descritti i percorsi consentiti e ogni percorso è separato da ":"

/ var / www / clients / client2 / web3 / image: / var / www / clients / client2 / web3 / web: / var / www / ... e così via

  • Quindi qui bisogna mettere il percorso a cui si vuole accedere, nel mio caso è:

/ var / www / clients / client2 / web3 / image:

  • Il problema si presenta perché:

Quando uno script tenta di accedere al filesystem, ad esempio utilizzando include o fopen (), viene controllata la posizione del file. Quando il file è al di fuori dell'albero di directory specificato, PHP rifiuterà di accedervi.


0

Se stai utilizzando uno stack IIS di PHP e hai questo errore, di solito si tratta di una rapida correzione delle autorizzazioni.

Se amministri tu stesso il server Windows e hai accesso, prova PRIMA:

Passa alla cartella che ti dà fastidio alla scrittura e fai clic con il pulsante destro del mouse> apri proprietà> sicurezza.

Guarda quali utenti hanno accesso alla cartella, quali hanno solo lettura e quali hanno accesso pieno. Hai un gruppo che sta bloccando la scrittura?

La correzione sarà specifica per la tua configurazione IIS, stai utilizzando l'autenticazione anonima con un utente specifico IUSR o con l'identità del pool di applicazioni?

In ogni caso, finirai per aggiungere un nuovo permesso di scrittura completo per uno tra IUSR, IIS_IUSRS o l'identità del tuo pool di applicazioni - come ho detto, questo varierà a seconda della tua configurazione e di come lo vuoi fare, puoi andare nella tana del coniglio di Google su questo (uno di questi post: autorizzazioni IIS_IUSRS e IUSR in IIS8 ) Per me, io uso anon con la mia identità del pool di app in modo da poterMACHINE_NAME\IIS_IUSRS con la lettura / scrittura completa su qualsiasi temp o caricamento cartelle.

Non ho bisogno di aggiungere nulla in più al mio open_basedir =nel php.ini.


0

Oltre alla risposta di @ yogihosting , se stai utilizzando DirectAdmin , segui questi passaggi:

  1. Vai alla pagina di accesso di DirectAdmin. Di solito, il suo porto è 2222.
  2. Accedi come amministratore. Il suo nome utente è admindi default.
  3. Dal "Livello di accesso" nel pannello di destra, assicurati di essere su "Livello amministratore". In caso contrario, cambialo.
  4. Dalla sezione "Funzionalità extra", fare clic su "Configurazioni HTTPD personalizzate".
  5. Scegli il dominio che desideri modificare.
  6. Immettere le configurazioni che si desidera modificare nell'area di testo nella parte superiore della pagina. È necessario considerare il file di configurazione esistente e modificare i valori basati su di esso. Ad esempio, se vedi che open_basedirè impostato all'interno di un <Directory>, forse dovresti racchiudere la tua modifica nel <Directory>tag correlato :

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. Dopo aver apportato le modifiche necessarie, fare clic sul pulsante "Salva".

  8. Ora dovresti vedere le tue modifiche salvate nel file di configurazione se erano valide.

Tuttavia, esiste un altro modo per modificare il file di configurazione:

Attenzione : fai attenzione e segui i passaggi seguenti a tuo rischio, in quanto potresti incorrere in errori o causare tempi di inattività. Il modo consigliato è il precedente, in quanto ti impedisce di modificare il file di configurazione in modo improprio e ti mostra l'errore.

  1. Accedi al tuo server come root.
  2. Vai a /usr/local/directadmin/data/users. Dagli utenti elencati, vai a quello relativo al dominio che desideri modificare.
  3. Qui c'è un httpd.conffile. Crea un backup da esso:

    cp httpd.conf httpd.conf.back
    
  4. Ora modifica il file di configurazione con il tuo editor preferito. Ad esempio, modifica esistente open_basedirin none. Non tentare di rimuovere oggetti, altrimenti potrebbero verificarsi tempi di inattività. Salva il file dopo la modifica.

  5. Riavviare il server Web Apache utilizzando uno dei seguenti modi (utilizzare sudose necessario):

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. Se si verificano errori, sostituire il file di configurazione principale con il file di backup e riavviare il server web.

Di nuovo, la prima soluzione è quella preferita e non dovresti provare il secondo metodo la prima volta. Come si nota nell'avvertenza, il vantaggio del primo modo è che impedisce di salvare le tue cose mal configurate.

Spero che sia d'aiuto!


0

Sto usando un Apache vhost -File per eseguire PHP con opzioni ini specifiche dell'applicazione sul mio server Windows. Quindi utilizzo l' opzione -d del comando php.

Sto impostando open_basedir per ogni applicazione come una di queste opzioni.

Avevo bisogno di impostare più URL come open_basedir, incluso un percorso UNC , e la sintassi per questo caso era un po 'difficile da trovare. Devi separare i percorsi con punto e virgola e se il tuo primo percorso inizia con una lettera, potresti dover iniziare anche l'elenco con un punto e virgola. Almeno questo è ciò che funziona per me.

Esempio:

php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/

-3

Basta cercare

open_basedir =

in php.ini e disabilitarlo. Questa è la soluzione più semplice per risolvere questo problema.

Prima delle modifiche open_basedir =

Dopo le modifiche ;open_basedir =

Ps - Dopo le modifiche non dimenticare di riavviare il server.

Godere ;)


3
non farlo ... la sicurezza è, che tu ci creda o no, importante. :) È ora di leggere i documenti sui tuoi strumenti: php.net/manual/en/ini.core.php#ini.open-basedir
Adam Lenda
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.