Newsgroup: it.comp.www.php
Titolo: file_exists

if(file_exists($banner)) // ho provato anche "$banner" ed anche "/$banner"
 {
 $id=1
  }
else
 {
 $id=2;
 }
premesso che $banner esiste ed è qualcosa come 
http://www.miosito.it/cartella1/cartella2/immagine.gif
come mai $id è sempre uguale a 2 ???? 

 ha scritto nel messaggio 
news:45a3a53c$0$16150$4faf...@reader3.news.tin.it...
nel messaggio precedente, dopo $id=1, avevo dimenticato il ";" ma nel codice 
della pagina c'è. 


banner (cartella)
banner (file)
file_exists sempre true
if(is_file(banner)){
 o e' un file o nn te ne frega na mazza


 }
------------------------------
if(is_file($banner))
 {
    $id=1;
 }
else
 {
 $id=2;
 }
anche cosě non funziona e, pur esistendo il file... $id=2


forse perchè non hai nessun file che si chiama 
"
http://www.miosito.it/cartella1/cartella2/immagine.gif
" nella cartella in 
cui gira il PHP, a parte la battuta, secondo me file_exists() lavora solo 
sui path e non sulle URL, son sicuro invece che sulle URL funzionano file(), 
e file_get_content().
ciao
Mario
_________________________
WEB: 
www.mario-online.com
________________________________ 

 file(), e file_get_content().
-------------
Credo che il problema sia proprio questo ma...
come faccio a sapere se il file "pippo.jpg" esiste nella stessa dir della 
cartella?
Considera che la cartella è una variabile in quanto diverse cartelle 
includono la stessa pagina php
se la cartella fosse fissa (ad esempio PLUTO) scriverei ../pluto/pippo.jpg
ciao 


wrote:


Evidentemente non vede $banner. Per esempio:
- usi un path relativo, lo script non esegue nella cartella che credi,
  e quindi il path porta altrove, dove $banner non c'e'.
  Per accertartene, fai stampare la directory con getcwd(). *Dovrebbe*
  corrispondere alla document root, se il tuo script e' li'.
- problemi di maiuscole e minuscole
- $banner non contiene quello che credi
  Per verificarlo, stampa $banner: "banner = '$banner'", controllando,
  magari, che non ci siano spazi o ritorni carrello in $banner (non si
  sa mai).
- stai verificando l'esistenza di un file remoto
  In questo caso PHP sa assai se la pagina che riceve (che, magari, e'
  una pagina di default creata per non inviare un ERR 404, perche' "E'
  brutto!") e' quella che volevi o no: e hai un file che "ESISTE", sia
  che non ci sia sia che ci sia.
  Oppure viceversa: PHP non puo' aprire il file remoto (firewall, guai
  col proxy, fopen_wrappers disattivata, DNS farlocco...).
  Qui l'unica e' attivare tutti gli "error reporting", sperando che ci
  finisca dentro qualcosa di rivelatore.
- problemi di permessi sul file o sul path
  Controlla ogni elemento da linea di comando
- problemi di accentate e charset
  Qui me ne chiamo fuori :-)
Leonardo SE&O
-- 
Geordie - he's a man, there's little doot about't,
He's done all he can, wha' can do withoot't?
Doon there cam a blade, linkin' like me lordie,
He wad drive a trade, a' the loom of Geordie.

  e quindi il path porta altrove, dove $banner non c'e'.
----------------------
il problema è che, facendo stampare il valore di $banner... viene stampato 
l'url dell'immagine.
Esempio: 
http://www.miosito.it/img1.gif
il problema è (secondo me) che, come ha detto Mario:


Salvatore Paci ha scritto:

Problema chiarito in un topic poco tempo fa.
E' proprio così.
-- 
Amministratore
www.AmiciAmici.com
Giornalismo dal basso sui temi dell'amicizia, feste e divertimento.
PodCast "Pronto Chi Bussa" dalla Valtaro al Web...

Esempio: 
http://www.miosito.it/img1.gif
Allora non c'e' problema: se fopen_wrappers e' disponibile, leggi il file
e verifichi che, in questo caso, inizi per "GIF8".
<?php
	$banner	= '...';
        $test   = @file_get_contents($banner);
        $exists = (($test) && (0 === strpos($test, 'GIF8')));
        print $exists ? "Trovato" : "Non trovato";
?>
Se non e' disponibile probabilmente non hai neanche le funzioni socket, o
le cURL; ma puo' valere la pena vedere se invece ci sono e usare quelle.
In teoria sarebbe meglio andare di socket o cURL, e magari usare Range in
modo da scaricare meno dati possibile. Pero' la cosa si complica assai, a
meno di cercare su Google se qualcuno ha gia' fatto una classe o funzione
che provveda alla bisogna.
Leonardo


 ?>
Ho fatto come hai scritto ma...
ha impiegato pių di un minuto per terminare l'operazione e non ha trovato il 
file.
Invece il file esiste e, aprendolo con il notepad inizia proprio con GIF8
ciao

 Invece il file esiste e, aprendolo con il notepad inizia proprio con GIF8
File e script php risiedono sullo stesso server?
si? allora $_SEVER['DOCUMENT_ROOT']
oppure usi un url assoluto.
esmpio:
/www/
www.miosito.it/$sottocartella/imm.gif
Iacopo
http://www.iacoponeri.net

 ha scritto nel messaggio 
news:1168460970.6...@k58g2000hse.googlegroups.com...
File e script php risiedono sullo stesso server?
si? allora $_SEVER['DOCUMENT_ROOT']
oppure usi un url assoluto.
esmpio:
/www/
www.miosito.it/$sottocartella/imm.gif
Iacopo
http://www.iacoponeri.net
-------------------------------------
Ti spiego qual è esattamente il problema:
ho dato (gratuitamente) ad alcuni visitatori del mio sito un mini CMS, 
facilissimo da gestire.
Tra le varie personalizzazioni c'è la possibilità di inserire un loro 
banner.
Questo banner, per non appesantire il sito, deve essere esterno ad esso.
Il mio sito è 
www.salvatorepaci.it
 e il tizio pingo_pallino mette come 
banner 
http://www.pingo_pallino.it/banner.gif
Se viene riportato un url di banner esistente... non c'è alcun problema. 
Invece, a volte accade che l'utente, non ferrato in materia, scrive nel file 
www.miobanner che naturalmente non è un banner (e neanche un sito o altro). 
In quel caso... (!file_exists) deve impostare in automatico il banner di 
default.
Il discorso è che non ho un url del tipo 
/www/
www.miosito.it/$sottocartella/imm.gif
 ma del tipo 
http://www.sito.it/imm.gif
anche se il file esiste... "LUI" mi dice che non esiste.
Ciao

file.
Mmm. Non e' che c'e' un firewall di qualche tipo? Alcuni provider non
vedono di buon occhio che, dal server, tu apra connessioni verso host
esterni. Alcuni ti tolgono le funzioni per farlo (socket ecc.); altri
ti sbarrano la strada.
Prova a mettere l'error reporting al massimo, e a togliere la "@" che
c'e' davanti a file_get_contents.


 anche se il file esiste... "LUI" mi dice che non esiste.
Non ho seguito tutto il thread, quindi potrei proporti qualcosa che
sai già non funzionare, comunque prova questa - presa dal manuale
online 
http://www.php.net/file_exists
 - e leggermente modificata.
<?php
function url_exists($url)
{
    $handle = @fopen($url, "r");
    if ($handle === false) {
        $out = false;   
    } else {
        $out = true;
        fclose($handle);
    }
    return $out;
}
?>
Ciao.
-- 
Federico

 ?>
---------------
Non funziona neanche cosě.
tale funzione si aspetterebbe un url del tipo 
"/rootdomain/cartella/file.gif" mentre io ho un url del tipo 
http://www.sito/cartella/imm.gif

 c'e' davanti a file_get_contents.
----
niente da fare neanche cosě
considera che quel file č all'interno del mio sito ed ha permessi 
777 -rwxrwxrwx utente ftpuser (anche le cartelle che lo contengono hanno 
777) 

 
http://www.sito/cartella/imm.gif
Sicuro? Perché ho provato quella funzione cosě:
<?php
function url_exists($url)
{
    $handle = @fopen($url, "r");
    if ($handle === false) {
        $out = false;   
    } else {
        $out = true;
        fclose($handle);
    }
    return $out;
}
var_dump(url_exists('
http://www.google.it/intl/it_it/images/logo.gif')
);
?>
E su tre server differenti:
- Apache 1.3.33/PHP 4.4.1 su Windows
- Apache 1.3.33/PHP 4.4.4 su Linux
- IIS6/PHP4.4.1 su Windows
mi restituisce correttamente bool(true). A te cosa restituisce
l'esempio indicato sopra?
-- 
Federico

niente da fare neanche cosě
IMHO e' un problema di firewall. Proviamo con questa (dal manuale): al
posto di 
example.com
 mettici l'indirizzo del banner.
<?php
$fp = fsockopen("
www.example.com
", 80, $errno, $errstr, 30);
if (!$fp) {
   echo "$errstr ($errno)<br />\n";
} else {
   $out = "GET / HTTP/1.1\r\n";
   $out .= "Host: 
www.example.com
\r\n";
   $out .= "Connection: Close\r\n\r\n";
   fwrite($fp, $out);
   while (!feof($fp)) {
       echo fgets($fp, 128);
   }
   fclose($fp);
}
?> 


 ?>
se metto dentro parentesi $banner mi scrive "bool false"
stessa cosa se metto "$banner" oppure l'url completo 
'
http://www.eccetera.it/pippo.gif
' 


Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: 
getaddrinfo failed: Name or service not known in 
/rootdomain/it/s/a/
salvatorepaci.it/public_html/lotto_pagine_personali/inc/header.inc
 
on line 37
Warning: fsockopen() [function.fsockopen]: unable to connect to 
http://www.salvatorepaci.it/lotto_pagine_personali/vincenzo_rizzo/banner.gif:80
 
in 
/rootdomain/it/s/a/
salvatorepaci.it/public_html/lotto_pagine_personali/inc/header.inc
 
on line 37
No such file or directory (2)
:((((((((((((
il banner esiste.
incollatelo sulla barra degli indirizzi :(((

 '
http://www.eccetera.it/pippo.gif
'
Dipende da qualche impostazione del PHP o da un firewall.
Le seguenti righe:
$banner = '
http://www.salvatorepaci.it/lotto_pagine_personali/vincenzo_rizzo/banner.gif
';
var_dump(url_exists($banner));
a me restituiscono bool(true).
Affinché fopen() possa utilizzare url assoluti sono necessarie alcune
impostazioni relative il safe_mode, open_basedir e allow_url_fopen.
Vedi 
http://it2.php.net/fopen
 e assicurati che nel tuo caso
permettano a fopen() di accettare url remoti.
Se nel codice con la funzione url_exists() - quello che ti restituisce
bool(false) - togli il carattere @ davanti a fopen() e come prima
riga metti error_reporting(E_ALL), impostando display_errors = On nel
php.ini (riavvia il server se lo devi modificare), viene sollevato
qualche Warning/Notice?
-- 
Federico

 qualche Warning/Notice?
------------
Ho fatto tutto quello che mi hai detto, ad esclusione del riavvio del server 
(che è di Tiscali).
Mi arrendo!
Mi dà False
Nessun errore con error_reporting(E_ALL)
:((( 

 Nessun errore con error_reporting(E_ALL)
Crea un file, dagli nome phpinfo.php, scrivici:
<?php
phpinfo();
?>
poi caricalo sul server e richiamalo col browser. Dovrebbe apparire
una tabella con un sacco di voci. Cerca allow_url_fopen e safe_mode.
Come sono impostati, su On o su Off?
Hai già provato a chiedere all'assistenza Tiscali se sui loro server
quello che vuoi fare è permesso?
-- 
Federico

 ?>
Anzi, scrivici:
<?php
phpinfo(INFO_CONFIGURATION);
?>
Cosě visualizzi solo la tabella che ti interessa.
-- 
Federico

 quello che vuoi fare è permesso?
-------------------
sono tutti e due in ON
Tiscali???
Sai quante volte ho contestato loro errori???
All'inizio mi rispondevano...
dopo diversi appunti (che poi però hanno corretto) sai cosa fanno?
correggono ma non mi rispondono più!!!!!!!!!!!!!!!!
ciao 

 
http://www.salvatorepaci.it/lotto_pagine_personali/vincenzo_rizzo/banner.gif:80
[CUT]
ci sono almeno due errori gravi nello script:
- stai cercando di aprire una connessione al server (e nota bene dico
server)
"
http://www.salva.
...../ner.gif"
questo server non esisterà mai, e poi gli stai chiedendo la pagina
iniziale:
GET / HTTP/1.1
ecco cosa dovresti fare:
con fsockopen apri la connessione al server 
www.esempio.com
senza http e senza cartella. a fsockopen non interessa il protocollo
usato,
ne capisce cosa voglia dire.
la connessione la effettui sulla porta 80 che è quella tipica del
servizio web, ribadisco non significa che sti usando il protocollo
http.
poi una volta connesso scopri che il server esiste ed è aperto un
servizio in ascolto sulla 80.
a questo punto seguendo lo standard http gli mandi una richiesta.
GET /cartella/immagine.gif HTTP/1.0
e tutte le altre intestazioni che il server si aspetta...
poi il server risponderà alla tua richiesta mandando il file.
a questo punto controlli se lo status è 200 (regexp aiutaci tu).
buon lavoro
Iacopo Neri
http://www.iacoponeri.net

 sono tutti e due in ON
Il fatto che safe_mode = On potrebbe in qualche modo limitare il
comportamento di fopen(). Vedi 
http://it2.php.net/fopen
. 
Prova la funzione remote_file_exists() (scritta da Setec Astronomy)
che trovi a questo indirizzo:
http://setecastronomy.redirectme.net/index.php?page=functions&type=detail&IDContent=11
-- 
Federico

on line 37
Ooookay. Il problema FORSE e' meno insormontabile - puo' darsi che non
ti abbiano VOLONTARIAMENTE chiuso il firewall, ma che abbiano lasciato
fuori la configurazione del resolver.
In pratica semplicemente il server non sa chi sia "
salvatorepaci.it
" -
ne' nessun altro sito web, probabilmente.
Non e' una cosa risolvibile da PHP, e devi sentire chi amministra quel
server.


 fuori la configurazione del resolver.
---------
Vaaaaaaaaaa beeneee (alla Ranzani)
dopo tutto non era una cosa importante.
Grazie a tutti quanti!

 
http://setecastronomy.redirectme.net/index.php?page=functions&type=detail&IDContent=11
-------------
Tempi di attesa superiori al minuto e risultato nullo.
Grazie lo stesso!
Ciao 

 dopo tutto non era una cosa importante.
Se vuoi prenderlo in considerazione, forse si trova un sistema di
risolvere lato client (javascript). L'idea, o meglio, il brutto
accrocchio è il seguente: 
- ai tuoi utenti fai inserire gli url delle immagini che vogliono; se 
  queste esistono o non esistono te ne freghi.
- A inizio pagina c'è un ArrayImmaginiUtenti[0][0]="UrlAssolutoImmagine0"
                         ArrayImmaginiUtenti[0][1]=false
// arr bidimensionale, ogni utente ne ha uno con URL e var bool associata
                         ArrayImmaginiUtenti[1][0]="UrlAssolutoImmagine1"
                         ArrayImmaginiUtenti[1][1]=false // sempre false
                         eccetera
- nel tag <img nome="utente1">: onload="ArrayImmaginiUtenti[1][1]=true" 
  (NB: la variabile diventa true SOLO se l'immagine 
  ArrayImmaginiUtenti[1][0] viene caricata)
- a fine giochi verifichi quali utenti sono settati a true 
  e quali a false. I "false", ossia, i loro url di immagini inesistenti,
  vengono rimpiazzati con quello del tuo banner.
Sostanzialmente, NON si tratta di stabilire se l'immagine si trova o non
si trova sul server, ma di capire se il browser l'ha trovata.
Facci un pensierino. Se decidi che l'ignobile workaround tutto sommato
può andar bene e hai bisogno di una mano scrivimi in privato, qui siamo
OT. Eventualmente contattami (oppure attendi una mia risposta) in
settimana entrante, ché nei prossimi 2-3 giorni non avrò tempo nemmeno di
pisciare. Occhio all'antispam. CIAO!
-- 
mailto: y = i
----------------------------------------
Vivo nel terrore di non essere frainteso 
(Oscar Wilde)