Visualizzazione risultati 1 fino 19 di 19

Discussione: filesize non funziona (sempre 0)

  1. #1
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito filesize non funziona (sempre 0)

    Ciao a tutti!!!

    Io faccio una cosa del genere:

    Codice PHP:
    $handle = fopen($path.$wantedfilename, 'rb');
    header("Cache-Control: ");
    header("Pragma: ");
    header($ct);
    header("Content-Disposition: attachment; filename=\"".$wantedfilename."\"");
    header("Content-Length: ".filesize($path.$wantedfilename));
    fpassthru($handle);
    Si noti che:

    1) $ct sono i mime-types, sono tutti impostati correttamente.
    2) non cambia nulla togliendo o mettendo Cache-control, pragma, content-disposition e simili
    3) I nomi dei files passati a filesize() sono corretti (/membri/pietrovischia/cartellaprotetta/nomefile.extension)

    Quello che succede è che il file non viene mai visualizzato, poiché filesize() restituisce sempre 0.

    Ho controllato le dimensioni dei files sia da filezilla sia da pannello di controllo, e sono tutti dimensionati (e inoltre se li apro "normalmente" andando col browser sulla cartella loro si aprono tranquillamente)

    DOMANDA: dove diavolo sta il problema?

  2. #2
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Ma fopen funziona?
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  3. #3
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Al posto di "rb" non dovresti mettere "r+b"?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  4. #4
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    Citazione Originalmente inviato da funcool
    Al posto di "rb" non dovresti mettere "r+b"?
    No, "r+b" lo apre in lettura e scrittura, mentre io lo voglio aprire in sola lettura.

    Mmm... Come posso controllare il funzionamento di fopen? vedo se viene impostata $php_errormsg diversa da "" ?

  5. #5
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Il problema potrebbe essere il percorso che dai del file.
    -non deve essere url (es: http://tuosito.altervista.etcc...) perchè tenterebbe diaccederci dall'esterno.
    - se relativo devi controllare di essere nella dir giousta
    -se assoluto deve avere "/" iniziale
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  6. #6
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    Citazione Originalmente inviato da binarysun
    Il problema potrebbe essere il percorso che dai del file.
    -non deve essere url (es: http://tuosito.altervista.etcc...) perchè tenterebbe diaccederci dall'esterno.
    - se relativo devi controllare di essere nella dir giousta
    -se assoluto deve avere "/" iniziale
    L'accesso avviene dall'interno, con la / iniziale

    /membri/pietrovischia/cartella/nomefile.ext

  7. #7
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Curioso,
    Fai qualche check prima? tipo
    if ( file_exists( $path.$wantedfilename ) && is_readable( $path.$wantedfilename ) )

    non si sa mai.. almeno per sapere se curiosamente is_readable torna false

    E poi.. lo do per scontato ma sempre all'insegna del "non si sa mai":
    ti sei fatto una bella echo per esser sicuri che
    $path.$wantedfilename
    sia concatenato correttamente, intendo se $path (oltre a iniziare come dicevi) termina con uno slash /
    Immagino di sì, prova is_readable come dicevo su..

    Edit:
    Certo l'alternativa di stampare la strlen del get_contents del file c'è..
    però se funzionasse filesize capisco che sarebbe più "liscio"
    Ultima modifica di heracleum : 14-01-2006 alle ore 22.11.31
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  8. #8
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    Dunque: ho fatto le varie prove:

    Le trailing slashes ci sono.

    I nomi dei files sono corretti, e come da pannello di controllo i files esistono e hanno dimensioni diverse da 0.

    Tuttavia:

    if_exists restituisce FALSE
    is_readable restituisce FALSE

    e soprattutto $handle = fopen($path.$wantedfilename) or die("Accidenti");
    restituisce un laconico "Accidenti"...

    Non capisco proprio... Perché non funziona? I files ci sono... E li apro "normalmente"...

  9. #9
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Prova come percorso al posto di
    /membri/pietrovischia/cartella/nomefile.ext
    Mettici
    /cartella/nomefile.ext
    Oppure
    /membri2/pietrovischia/cartella/nomefile.ext
    Prova disperata:P
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  10. #10
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    Con entrambi quei due non trova nemmeno un file che apro qualche riga prima ^_^

  11. #11
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Di solito o è:
    /membri/nome/
    o apputno
    /membri2/nome/

    Ma nel caso in cui tu NON sia sicuro di quale sia, fatti restituire un errore QUALSIASI di sintassi e controlla il path dello script, l'hai fatto?
    (chiedo, visto che accettando la prova "disperata" sembravi dubbioso sul tuo path utente)
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  12. #12
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    Ho controllato, è

    /membri/pietrovischia/

    Dunque: ho fatto un paio di prove, giungendo alla seguente conclusione:

    echo $path.$wantedfilename; restituisce /membri/pietrovischia/cartella/file.ext

    echo "/membri/pietrovischia/cartella/file.ext" restituisce lo stesso

    $checavolo = $path.$wantedfilename; echo $checavolo; restituisce la stessa cosa.

    MA

    fopen($path.$wantedfilename,"rb") or die ("Unable"); e
    fopen($checavolo,"rb") or die("Unable"); restituiscono entrambi Unable

    MENTRE

    fopen("/membri/pietrovischia/cartella/file.ext","rb") or die("Unable");
    restituisce correttamente il file, e la sua giusta dimensione (MA l'immagine non si visualizza per "errori nell'immagine")

  13. #13
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Non è possibile!
    Dai posta il codice così vediamo, so che non sei affatto inesperto ma sai.. 4 o 8 occhi vedono meglio di 2 :)
    Magari nel "contesto" ci sono altre cose in ballo.. non saprei..
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  14. #14
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    E' un Rubberwall 1.0 di www.explodingpanda.com, ma pesantemente modificato (l'originale non funzionava )

    Ghghgh avro' fatto qualche idiozia annidata in una miniriga ghghgh

    Codice PHP:
    $allowed = 0;
    include(
    'myleecherconf.php'); //qui ci sono i parametri di path: li includo qui sotto

    $path = "/membri/pietrovischia/cartella/";
    $webaddress = "http://nomeutente:password@www.pietrovischia.altervista.org/cartella/";

    // fine parametri di path

    // qui si fanno dei confronti con un array di domini consentiti per la richiesta. Se non c'e' stringa referer, si assume sia consentito.

    if($allowblank > 0) { if($_SERVER['HTTP_REFERER']=="") { $allowed = 1; }}

    $domains = count($alloweddomains);

    for(
    $y=0;$y<$domains+1;$y++) {
    if((
    stristr($_SERVER['HTTP_REFERER'], $alloweddomains[$y]))) { $allowed = 1;}
    }

    if(
    $allowed > 0) {

    // leggo un file in cui sono immagazzinati i nomi e i codici numerici dei files, nel formato numero:nomefile

    $namenumberarray = file($path."immagini.dat");
    $numberoffiles = count($namenumberarray);
    $filenames = array();
    for(
    $x=0;$x<$numberoffiles+1;$x++) {
    $temporary = explode(":",$namenumberarray[$x]);
    $tempname = explode("\n",$temporary[1]);
    $filenames[$temporary[0]] = $tempname[0];
    }

    // questo è perché lo script viene chiamato per esempio come getimage.php?dld=3
    if(!isset($filenames[$_GET['dld']])) {
    if(
    $logging > 0){
    $status = "ReqNF";
    include(
    'logreg.php');
    }
    echo(
    'That number wasnt found!');
    exit;
    }

    $wantedfilename = $filenames[$_GET['dld']];


    $extension = explode(".", $wantedfilename);
    $numberinarray = count($extension);

    $lcext = strtolower($extension[$numberinarray-1]);

    //BEGIN CONTENT TYPES BLOCK. ADD OR REMOVE FILE TYPES HERE, AS SHOWN //
    //DON'T EDIT THIS UNLESS YOU KNOW WHAT YOU ARE DOING!//
    //MOST COMMON FILE TYPES ARE ALREADY INCLUDED//

    // qui l'originale aveva uno switch/case che non funzionava --> ora funziona con if elseif
    if (stristr($lcext, "swf")){
    $commonname="flash";
    $ct = "Content-type: application/x-shockwave-flash";
    }
    elseif (
    stristr($lcext, "wmv")){
    $commonname="wmv";
    $ct = "Content-type: video/x-ms-wmv";
    }
    elseif (
    stristr($lcext, "mov")){
    $commonname="quicktime movie";
    $ct = "Content-type: video/quicktime";
    }
    elseif (
    stristr($lcext, "avi")){
    $commonname="avi video";
    $ct = "Content-type: video/avi";
    }
    elseif (
    stristr($lcext, "bmp")){
    $commonname="bitmap";
    $ct = "Content-type: image/bmp";
    }
    elseif (
    stristr($lcext, "gif")){
    $commonname="gif";
    $ct = "Content-type: image/gif";
    }
    elseif (
    stristr($lcext, "jpeg") || stristr($lcext, "jpg") || stristr($lcext, "jpe")){
    $commonname="jpeg";
    $ct = "Content-type: image/jpeg";
    }
    elseif (
    stristr($lcext, "mpeg") || stristr($lcext, "mpg") || stristr($lcext, "mpe")){
    $commonname="mpeg";
    $ct = "Content-type: video/mpeg";
    }
    elseif (
    stristr($lcext, "png")){
    $commonname="png";
    $ct = "Content-type: image/png";
    }
    else{
    $commonname="Generic Filetype";
    $ct = "Content-type: application/octet-stream";

    if(
    $logging > 0){
    $status = "Generic_Filetype";
    include(
    'logreg.php');
    }
    }

    $handle = fopen($path.$wantedfilename, "rb") or die ("Unable");
    //$handle = fopen("/membri/pietrovischia/cartella/file.jpg", "rb") or die("Unable"); funziona, benché poi dia "errore di immagine"
    header("Cache-Control: "); //keeps ie happy
    header("Pragma: "); //keeps ie happy essenzialmente disabilitano la Cache. Ho provato a toglierli, ma non cambia un tubo
    header($ct); //content type as set above from explode();

    //questo mini-if l'ho messo e tolto,non cambia, semplicemente obbliga il browser ad aprire la mascherina "salva file" invece di visualizzarlo inline


    if(!stristr($lcext, "swf")){//flash plays, it isnt downloaded as an actual file.
    header("Content-Disposition: attachment; filename=\"".$wantedfilename."\"");
    }

    header("Content-Length: ".filesize($path.$wantedfilename));

    echo
    "Errore: ".$php_errormsg; //questo non da nulla
    if (file_exists( $path.$wantedfilename)){
    echo
    "Esiste";
    }
    // mai una volta che dica che esiste
    if(is_readable($path.$wantedfilename)) {
    echo
    "E leggibile";
    }
    //mai una volta che dica che è leggibile
    echo "Filename: ".$path.$wantedfilename;
    echo
    " Webfilename: ".$webaddress.$wantedfilename; //entrambi corretti
    echo " Contenttype: ".$ct; //corretto
    echo " lcext: ".$lcext; //corretto (è l'estensione del file)
    echo "filesize: ".filesize($path.$wantedfilename); // zero...
    fpassthru($handle); //fornisce il flusso
    //logs
    if($logging > 0){
    $status = "Granted";
    include(
    'logreg.php');
    }
    exit;
    }

    else {
    if(
    $logging > 0){
    $status = "Denied";
    include(
    'logreg.php');
    }
    exit;
    //quiet leech kill
    }
    ?>
    Ultima modifica di pietrovischia : 15-01-2006 alle ore 01.39.13 Motivo: Impaginare meglio il codice

  15. #15
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Ci potrebbero essere più punti "caldi", questo comunque è quello più sospetto:
    $tempname = explode("\n",$temporary[1]);

    Perché secondo me il file dat potrebbe avere un codice di andata a capo del tipo \r\n (carriage_return + newline) o simili, è una delle tipiche trappole quando si legge un file magari non creato da script ma con un editor di testo.
    In poche parole -come avrai intuito- quando esplodi per \n
    come nome del file gli arriva:
    "nomefile.est\r"
    e quindi quando lo stampi ad echo NON TE NE ACCORGI ad occhio (dici ok è giusto!... invece no )
    e quando gli chiedi di aprire un file del genere non lo troverà mai.

    Come prima cosa, per prova, nell'echo di controllo del nome del file,
    fagli fare un strlen() e CONTA i caratteri se corrispondono, se ne trovi uno in più potrebbe essere questa la strada.
    se:
    pippo.txt
    la strlen() ti torna 10 invece di 9 è quello
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  16. #16
    L'avatar di pietrovischia
    pietrovischia non è connesso Utente attivo
    Data registrazione
    16-10-2005
    Residenza
    Padova
    Messaggi
    351

    Predefinito

    Heracleum...

    Sei grande...

    fireball.jpg = 12 caratteri
    strlen($wantedfilename)=13...



    Bene bene, dunque che faccio? Il file immagini.dat lo creo da editor di testo (emacs o notepad, a seconda di dove sto). Che voi sappiate c'e' un editor che sicuramente non aggiunge anche il CR?
    Oppure mi scrivo direttamente un'interfaccia da script che mi permetta di aggiungere sul file i nomi?

    Oppure non mi preoccupo di questo e semplicemente faccio un check e dico "se nel nome file c'è un CR, strippa il CR"?


    EDIT: ho optato per aggiungere

    Codice PHP:
    $wantedfilenametemp = $filenames[$_GET['dld']];
    $nocr = explode("\r",$wantedfilenametemp);
    $wantedfilename = $nocr[0];
    che mi permette di modificare immagini.dat anche su altri computer/editors senza stare a preoccuparmi

    P.S.: se non c'e' \r, explode fornisce la stringa intera, giusto?
    Ultima modifica di pietrovischia : 15-01-2006 alle ore 12.34.02

  17. #17
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Maaa vieeeeenii
    (esulto come un bimbo)

    Di solito gli editor di testo decenti hanno funzioni di conversione proprio per le andate a capo.
    Visto che è "roba tua" potresti assicurarti di editarli sempre in un tipo, che se per dire aggiunge \r\n allora esplodi direttamente per '\r\n'
    Eviti magari di fare un check dinamico ogni volta per sapere quel formato dat che tipo di andata a capo ha.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  18. #18
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Non ho ben capito il vostro discorso, ma non basta un semplice trim?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  19. #19
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Penso di sì, ma è molto meno chic
    Sinceramente dovrei controllare nei manuali, in Java il trim di sicuro rimuove anche i cosiddetti white-spaces (quindi tab, andate a capo e via..) in php non posso giurarci. Controlla...
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •