2010-05-24 8 views
53

sto cercando di utilizzare PHP per creare un file, ma non funziona. Presumo questo perché non ha accesso in scrittura (è sempre stato il problema prima). Ho cercato di verificare se questo è stato il problema, rendendo la cartella di chmod 0777, ma che appena finito per fare tutti gli script nella directory restituiscono un messaggio di 500 errore fino a quando l'ho cambiato di nuovo. Come concedo l'accesso in scrittura PHP al mio file system in modo che possa creare un file?Come concedo l'accesso in scrittura PHP a una directory?

Edit: E 'ospitato su Hostgator hosting condiviso usando Apache.

Edit 2: Qualcuno ha chiesto per il codice: Il codice è uno script immagine GD. So che il resto funziona come prima stavo creando l'immagine ogni volta che veniva chiamata. Ora sto cercando di crearli quando viene aggiunto un nuovo testo e li salviamo in una cartella. La riga di scrittura che ho è: imagejpeg (null, $ file, 85);

Ho anche creato un file di prova per verificare se fosse solo uno script rotto (copiato principalmente da tizag): http://gearboxshow.info/rkr/lesig.jpg/testfile.txt (non so se/come inviare il codice qui correttamente Ecco il contenuto del. Script PHP, meno tag PHP.)

Restituisce 13,13,1 (righe separate), quindi sembra che pensi di aver scritto qualcosa, ma il file testfile.txt è vuoto (ho caricato uno vuoto), o inesistente (se lo elimino).

Edit 3: Il server esegue CentOS.

+0

È questo un server di controllare o siete su un server condiviso? – webbiedave

+0

Stai usando Apache? – Elijah

+0

Hostgator hosting condiviso. Apache. –

risposta

43

Un modo molto semplice è quello di consentire a PHP di creare la directory stessa in primo luogo.

<?php 
$dir = 'myDir'; 

// create new directory with 744 permissions if it does not exist yet 
// owner will be the user/group the PHP script is run under 
if (!file_exists($dir)) { 
    $oldmask = umask(0); // helpful when used in linux server 
    mkdir ($dir, 0744); 
} 

file_put_contents ($dir.'/test.txt', 'Hello File'); 

Ciò consente di risparmiare il fastidio con le autorizzazioni.

+2

Questo è giusto. È possibile modificare le autorizzazioni per soddisfare le proprie esigenze. – favo

+6

Questa è la soluzione più semplice anche se non dovresti usare 777 su apache dato che è configurato per bloccare i file theose. – vdbuilder

+3

Ricevo il permesso negato durante la creazione della directory! – maxisme

3

È possibile modificare le autorizzazioni di una cartella con chmod di PHP(). Ulteriori informazioni su come utilizzare il comando sono: http://php.net/manual/en/function.chmod.php

Se si verifica un errore 500 quando si impostano le autorizzazioni su 777 (mondo scrivibile), significa che il server è configurato per impedire l'esecuzione di tali file. Questo è fatto per ragioni di sicurezza. In tal caso, si vorrà utilizzare 755 come autorizzazioni massime su un file.

Se è presente un file error_log generato nella cartella in cui si sta eseguendo il documento PHP, è necessario visualizzare le ultime voci. Questo ti darà un'idea di dove lo script sta fallendo.

Per informazioni sulla manipolazione dei file PHP, utilizzo http://www.tizag.com/phpT/filewrite.php come risorsa.

+0

La cartella è già impostata su 0755 come impostazione predefinita. Non ho mai pensato di controllare error_log, ma l'ho appena fatto e non contiene nulla sul motivo per cui non è riuscito a produrre i file. –

+0

Potrebbe essere una buona idea pubblicare il codice con cui si hanno problemi. Una buona risorsa che uso occasionalmente per la guida della sintassi del gestore di file è http://www.tizag.com/phpT/filewrite.php. –

+0

Post principale modificato con codice. –

29

Impostare il proprietario della directory sull'utente che esegue apache. Spesso nessuno su linux

chown nobody:nobody <dirname> 

In questo modo la cartella non sarà scrivibile mondo, ma ancora scrivibile per apache :)

+4

Se usi Ubuntu, questo utente e questo gruppo non esistono. Qualche suggerimento per realizzare quello che stai facendo qui allora? –

+13

@BrandonMinton 'chown www-data: www-data ' dovrebbe farlo. www-data è l'utente apache sui sistemi basati su debian –

+0

ciao, hai detto che devi "chown nessuno: nessuno " dove devo codificare questo? – guitarlass

2

ho scoperto che con HostGator è necessario impostare i file CMOD 644 e cartelle a 755 Poiché l'ho fatto in base al supporto tecnico, funziona con HostGator

1

chmod non consente di impostare la proprietà di un file. Per impostare la proprietà del file è necessario utilizzare il comando chown.

1

Ho avuto lo stesso problema:

Mentre ero riluttante a dare 0777 al mio indice php, creo una directory tmp con diritti di 0777, dove creare i file ho bisogno di scrivere a.

La mia directory php continua a essere protetta. Se qualcuno infila la directory tmp, il sito continua a funzionare come al solito.

1

È possibile impostare selinux su permissivo per analizzare.

# setenforce 0 

SELinux registrerà ma permetterà accede ai. Quindi puoi controllare lo /var/log/audit/audit.log per i dettagli. Forse avrai bisogno di cambiare il contesto di selinux. Per questo, userai il comando chcon. Se necessario, mostraci il tuo audit.log per una risposta più dettagliata.

Non dimenticare di abilitare selinux dopo aver risolto il problema. Meglio mantenere selinux forzato.

# setenforce 1 
1

Il modo migliore per dare l'accesso in scrittura a una directory ..

$dst = "path/to/directory"; 
mkdir($dst); 
chown($dst, "ownername"); 
chgrp($dst, "groupname"); 
exec ("find ".$dst." -type d -exec chmod 0777 {} +"); 
6

prima capire quale utente è in possesso di processo httpd utilizzando il seguente comando

ps aux | grep httpd 

si otterrà un diversi linea di risposta come questa:

phpuser 17121 0.0 0.2 414060 7928 ?  SN 03:49 0:00 /usr/sbin/httpd 

Qui 1a colonna mostra il nome dell'utente. Così ora si sa che l'utente che sta cercando di scrivere file, che è in questo caso phpuser È ora possibile andare avanti e impostare l'autorizzazione per la directory in cui lo script php sta cercando di scrivere qualcosa:

sudo chown phpuser:phpuser PhpCanWriteHere 
sudo chmod 755 PhpCanWriteHere 
0

I' Sto usando Ubuntu, e come detto sopra nessuno: nessuno funziona su Ubuntu. Si ottiene l'errore:

chown: invalid group: 'nobody:nobody' 

Invece si dovrebbe usare la 'nogroup', come:

chown nobody:nogroup <dirname> 
Problemi correlati