Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Php: accedere ad un file
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
fekir
Utente cancellato


Registrato: 17/10/08 20:50
Messaggi: 223

MessaggioInviato: 24 Giu 2009 19:58    Oggetto: Rispondi citando

rieccomi, con un nuovo problema ^_^

allora, premetto che stavolta funziona tutto, la directory dove metto i files in è la seguente:
/home/nome_utente/php

allora, volevo provare ad aprire un documento, quindi ho scritto nel file in .php:
Citazione:

$document_root = $server['document_root'];
$fp = fopen("$document_root/../ciao.txt", 'w');


il documento ciao.txt si trova in /home/nome_utente/php...

però, quando apro la pagina, mi appare il seguente messaggio:
Warning: fopen(/../ciao.txt) [function.fopen]: failed to open stream: Permesso negato in /home/nome_utente/php/processorder.php on line 74


line 74 è il comando $fp = ...


sapete cosa possa essere? io non sono riuscito a venirne a capo...
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 24 Giu 2009 21:45    Oggetto: Rispondi citando

Ciao fekir,
il problema è che non puoi uscire dalla document_root!
Per questioni di sicurezza (a meno di non cambiare le impostazioni di apache e alcune variabili di conf di php) i files che puoi raggiungere sono quelli dentro alla document_root del tuo sito.

In oltre (ma questa è un'altra cosa che non centra con il tuo problema) la costante super globale è:
Codice:

$_SERVER['DOCUMENT_ROOT']

e non
Codice:

$server['document_root']
Top
Profilo Invia messaggio privato
fekir
Utente cancellato


Registrato: 17/10/08 20:50
Messaggi: 223

MessaggioInviato: 24 Giu 2009 22:03    Oggetto: Rispondi citando

freemind ha scritto:
Ciao fekir,
il problema è che non puoi uscire dalla document_root!


ma...sono uscito?
dove avrei dovuto mettere il file se non sotto: /home/nome_utente/php ?

(mi sa che prima o poi bloccherai il mio accesso al forum per le mie domandi alquanto sciocche ^^)
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 24 Giu 2009 22:07    Oggetto: Rispondi citando

Primo: il forum esiste per aiutare la gente che chiede aiuto quindi non ci sono problemi.

Secondo: io prima sono stato impreciso: non puoi scrivere fuori dalla document_root per questioni di sicurezza (a meno dei cambiamenti che ho sottolineato prima). Puoi leggere. Quindi se apri il file in lettura, 'r' e non 'w' non dovresti ottenere il messaggio di errore.

Terzo: ora io faccio una domanda a te; tu hai una dir /home/utente/php in cui crei le subdir dei progetti, giusto? hai anche configurato i virtualhost oppure chiami la pagine con
Codice:

http://localhost/nome_progetto    (ammettendo che la pagina sia index.php)

??
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 24 Giu 2009 22:13    Oggetto: Rispondi citando

In realtà ho verificato che le impostazioni di default di apache in xampp permettono di uscire, allora hai un problemi di permessi sul file.
Ricorda che può esser letto se per nobody ci sono i permessi di lettura, per essere scritto quelli di scrittura.
Se crei ciao.txt a manina, è probabile che i permessi siano rw per il tuo utente ma al più r per gli altri.
Prova a dare da console
Codice:

chmod 766 ciao.txt (o anche chmod 666 ciao.txt)

nella dir in cui si trova ciao.txt e riesegui il tuo script.
Top
Profilo Invia messaggio privato
fekir
Utente cancellato


Registrato: 17/10/08 20:50
Messaggi: 223

MessaggioInviato: 24 Giu 2009 22:22    Oggetto: Rispondi citando

allora, la document root in teoria è questa: /opt/lampp/htdocs/ giusto?

io però la avevo cambiata in questa: home/nome_utente/php
o no? adesso io i file li metto in quella cartella e digitando:
http://localhost/nomeprogetto.php

visualizzo corretamente tutto il sito fino all'aprire con quel comando il documento di testo home/nome_utente/php/ciao.txt

inoltre, ho appena provato, anche scrivendo:
$fp = fopen ("$document_root/../ciao.txt", 'r');

mi dice
Warning: fopen(/../ciao.txt) [function.fopen]: failed to open stream: Nessun file o directory in /home/federico/php/processorder.php on line 74

processorder è il nome del file in .php dove c'è scritto il comando di aprire il documento di testo...


edit:
si ciao.txt lo ho fatto a mano, se digito quello che mi hai detto te nel terminale ottengo queste risposte:

...:~$ chmod 766 ciao.txt
chmod: impossibile accedere a "ciao.txt": Nessun file o directory
...:~$ chmod 666 ciao.txt
chmod: impossibile accedere a "ciao.txt": Nessun file o directory
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 24 Giu 2009 22:29    Oggetto: Rispondi citando

Mi limito per ora solo all'edit
fekir ha scritto:

edit:
si ciao.txt lo ho fatto a mano, se digito quello che mi hai detto te nel terminale ottengo queste risposte:

...:~$ chmod 766 ciao.txt
chmod: impossibile accedere a "ciao.txt": Nessun file o directory
...:~$ chmod 666 ciao.txt
chmod: impossibile accedere a "ciao.txt": Nessun file o directory

il comando lo hai dato da dentro alla dir che contiene ciao.txt (e devi esser lì altrimenti devi dare il percorso completo chmod 766 "/home/nome_utente/php/ciao.txt")?
L'errore restituito indica che il file, nella dir in cui sei, non c'è.

Puoi verificare se eri nella dir corretta?
Top
Profilo Invia messaggio privato
fekir
Utente cancellato


Registrato: 17/10/08 20:50
Messaggi: 223

MessaggioInviato: 25 Giu 2009 08:41    Oggetto: Rispondi citando

freemind ha scritto:
Mi limito per ora solo all'edit
fekir ha scritto:

edit:
si ciao.txt lo ho fatto a mano, se digito quello che mi hai detto te nel terminale ottengo queste risposte:

...:~$ chmod 766 ciao.txt
chmod: impossibile accedere a "ciao.txt": Nessun file o directory
...:~$ chmod 666 ciao.txt
chmod: impossibile accedere a "ciao.txt": Nessun file o directory

il comando lo hai dato da dentro alla dir che contiene ciao.txt (e devi esser lì altrimenti devi dare il percorso completo chmod 766 "/home/nome_utente/php/ciao.txt")?
L'errore restituito indica che il file, nella dir in cui sei, non c'è.

Puoi verificare se eri nella dir corretta?

no, allora non ero nella dir corretta...

...:~$ chmod 666 "/home/nome_utente/php/ciao.txt
>

...:~$ chmod 766 "/home/nome_utente/php/ciao.txt
>

ecco le risposte che ottengo
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 10534
Residenza: Tokelau

MessaggioInviato: 25 Giu 2009 10:30    Oggetto: Rispondi citando

fekir ha scritto:
mi dice
Warning: fopen(/../ciao.txt) [function.fopen]: failed to open stream: Nessun file o directory in /home/federico/php/processorder.php on line 74


guarda che sta cercando di aprire un file ciao.txt che si trova in /../ e non nella cartella che dici tu. Prova a scrivere un path costante, l'errore è nella variabile che imposti alla riga sopra...

Ciao
Top
Profilo Invia messaggio privato HomePage
fekir
Utente cancellato


Registrato: 17/10/08 20:50
Messaggi: 223

MessaggioInviato: 25 Giu 2009 10:36    Oggetto: Rispondi citando

ma /../ cosa è allora esattamente? credevo fosse /home/nome_utente/php/, cioè quella che ho impostato come document_root, dove metto tutti i files per visualizzarli..

vedrò di provare a mettere allora una path costante
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 10534
Residenza: Tokelau

MessaggioInviato: 25 Giu 2009 10:48    Oggetto: Rispondi citando

se fai una
Codice:
$fp = fopen ("$document_root/../ciao.txt", 'r');


e l'errore dice solo
Citazione:
/../ciao.txt


direi che $document_root è vuota...
Top
Profilo Invia messaggio privato HomePage
fekir
Utente cancellato


Registrato: 17/10/08 20:50
Messaggi: 223

MessaggioInviato: 25 Giu 2009 11:01    Oggetto: Rispondi citando

allora, questi sono altri tentativi che ho fatto:

$fp = fopen ("/home/nome_utente/php/ciao.txt", 'w');
oppure
$fp = fopen ("/home/nome_utente/php/ciao.txt", 'r');
--> non appare niente d niente
(non è questo l'indirizzo statico?)

$fp = fopen ("/ciao.txt", 'w');
oppure
$fp = fopen ("$document_root/ciao.txt", 'w');
--->Warning: fopen(/ciao.txt) [function.fopen]: failed to open stream: Nessun file o directory in /home/nome_utente/php/processorder.php on line 74
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 10534
Residenza: Tokelau

MessaggioInviato: 25 Giu 2009 11:09    Oggetto: Rispondi citando

fekir ha scritto:
allora, questi sono altri tentativi che ho fatto:

$fp = fopen ("/home/nome_utente/php/ciao.txt", 'w');
oppure
$fp = fopen ("/home/nome_utente/php/ciao.txt", 'r');
--> non appare niente d niente


e funziona? Hai provato a leggere (o scrivere) dal/nel file?
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 25 Giu 2009 12:09    Oggetto: Rispondi

Rettifica.
Negli spiegoni di prima ho fatto un po' di casino con i virtualhost e una conf senza.
In soldoni, con la tua conf non puoi uscire mai dalla dir in cui crei i progetti che nel tuo caso è la document_root settata in httpd.conf.

Ero andato a massa perchè avevi messo i '..' nel percorso di ciao.txt.
ciao.txt è leggibile/scrivibile se è nella document_root di cui ho parlato qualche riga fa e se ha i permessi corretti per l'utente che esegue lo script.
Il chmod che ti ho fatto fare serve a quello e il fatto che non abbia restituito nulla vuol dire che è andata bene. Sarebbe corretto far sì che ciao.txt abbia come proprietario nobody,i permessi di lettura e scrittura per questo e al max la lettura per gli altri.

Tu vuoi raggiungere il file
Codice:

/home/nome_utente/php/ciao.txt

e per farlo devi usare
Codice:

$_SERVER['DOCUMENT_ROOT'] . '/'. 'ciao.txt';


fekir ha scritto:

$fp = fopen ("/home/nome_utente/php/ciao.txt", 'w');
oppure
$fp = fopen ("/home/nome_utente/php/ciao.txt", 'r');
--> non appare niente d niente
(non è questo l'indirizzo statico?)

$fp = fopen ("/ciao.txt", 'w');
oppure
$fp = fopen ("$document_root/ciao.txt", 'w');
--->Warning: fopen(/ciao.txt) [function.fopen]: failed to open stream: Nessun file o directory in /home/nome_utente/php/processorder.php on line 74

Le prime non ritornano nulla, quindi ok, le altre ti danno il warning perchè la var
Codice:

$document_root

credo che tu l'abbia inizializzata ancora come nel primo post del 3d e non con
Codice:

$_SERVER['DOCUMENT_ROOT'];

Le maiuscole sono importanti!
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi