Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    file_exists() sempre false

    Ciao, premetto che ho già sondato tutte le opzioni proposte in rete per risolvere il mio problema.

    Questo è il codice:

    $complete = "";
    $id = 0;
    $filename = IMAGE_DIR.$id."_".$fileIn;
    if(!file_exists($filename)){
    $complete = IMAGE_DIR.$id."_".$fileIn;
    }else{
    //Finchè esiste il file con quel nome...
    while(file_exists(IMAGE_DIR.$id."_".$fileIn))
    {
    //incrementa l'id
    $id++;
    //Crea il file con il nome : n_nomefile.ext dove n sta per un numero
    $complete = IMAGE_DIR.$id."_".$fileIn;
    }
    $up->RenameFile($id."_".$fileIn);
    }

    praticamente verifico l'esistenza del file nel path indicato.
    Il problema è che file_exists() restituisce sempre false, anche se il file è presente.

    Ho provato ad usare if (@fopen($filename, "r")), ma ho lo stesso problema

    Ho verificato il result di var_dump(file_exists($filename)) ed è "boolean false".

    In sostanza, esiste un modo sicuro per verificare l'effettiva esistenza del file in un path?

    Grazie

  2. #2
    Dai qualche spiegazione in più del problema, o cosa intendi fare, perché a me, ad esempio, file_exists() restituisce true se il file c'è e false se non c'è.
    Vista la tua premessa dubito che sia un semplice errore di path, ma una controllatina la darei lo stesso.

  3. #3
    Sto gestendo l'upload di un'immagine.
    Devo fare in modo che su server non esistano doppioni di immagini e per fare questo antepongo al nome del file un id autoincrementante.

    Se per esempio dovessi caricare per 2 volte l'immagine pippo.jpg, al primo upload il file caricato avrà nome 0_pippo.jpg, mentre al secondo upload avrà nome 1_pippo.jpg

    Il problema è che il primo upload lo esegue (file_exists = false), il secondo non lo fa (file_exists è sempre false anche il file è presente).

    Ho anche provato a passare il percorso fisso (file_exists('picture/0_pippo.jpg')) per vedere se si perde qualcosa magari tramite variabili ma nulla.

    Moooolto strano, ma mi serve assolutamente risolvere questo problema..

  4. #4
    Visto che manca del codice da parte tua (la parte di upload del file) ho trovato uno script online per caricare un'img e ho aggiunto il tuo controllo, e come per magia funziona. (mi salva i file progressivamente nomefile.jpg, 0nomefile.jpg, 1nomefile.jpg ecc.)

    Codice PHP:
    <?php
    $id
    =0;
    do {
      if (
    is_uploaded_file($_FILES['image']['tmp_name'])) {
         if (
    $_FILES['image']['size'] > 18432) {
          
    $msg "

    Il file non deve superare i 18 KB!!</p>"
    ;
          break;
        }
        list(
    $width$height$type$attr) = getimagesize($_FILES['image']['tmp_name']);
        if ((
    $width 160) || ($height 180)) {
          
    $msg "

    Dimensioni non corrette!!</p>"
    ;
          break;
        }
        if ((
    $type!=1) && ($type!=2) && ($type!=3)) {
          
    $msg "

    Formato non corretto!!</p>"
    ;
          break;
        }
        if (
    file_exists('uppe/'.$_FILES['image']['name'])) {
          while(
    file_exists('uppe/'.$id.$_FILES['image']['name'])) {
              
    $id++;
              }
          
    $_FILES['image']['name']=$id.$_FILES['image']['name'];
          
    $msg "

    File già esistente sul server. Salvato come "
    .$_FILES['image']['name'].".</p>";
        }
        if (!
    move_uploaded_file($_FILES['image']['tmp_name'], 'uppe/'.$_FILES['image']['name'])) {
          
    $msg "

    Errore nel caricamento dell'immagine!!</p>"
    ;
          break;
        } 
         }
    } while (
    false);
    echo 
    $msg;
    ?>

    <form action="<?php echo $_PHP['SELF']?>" method="post" enctype="multipart/form-data">
        
        <input name="image" type="file" size="40" />
        


        
        <input name="upload" type="submit" value="Carica immagine" />
    </form>
    Spero sia utile,

  5. #5
    Ho seguito pari pari la guida riportata su http://forum.html.it/forum/showthrea...hreadid=694523 che fa proprio al caso mio e in più ho aggiunto il mio controllo.

    Domani do un'occhiata al tuo codice e ti faccio sapere.

    Nel frattempo ti ringrazio.

  6. #6
    Mi viene un po' difficile provare il codice che hai postato perché è una procedura completamente diversa da quella che ho strutturato.

    Puoi provare a testare anche tu il metodo che ho linkato nel mio post precedente implementando il rename in caso di upload di un doppione?

    Per mia comodità ho modificato il file config.images.php così:
    Codice PHP:
    <?php
        define
    ('TMP_DIR''picture/tmp/');
        
    define('IMAGE_DIR''picture/');
        
    define('THUMB_DIR''picture/tmbs/');
        
    define('IMAGE_QUALITY'80);
        
    define('THUMB_QUALITY'70);
        
    define('IMAGE_HEIGHT'400);
        
    define('THUMB_HEIGHT'75);
    ?>
    e tutte le altre mie modifiche le ho fatte nel file upload.php qui sotto:

    Codice PHP:
    <?PHP
        $a 
    session_id();
        if(empty(
    $a)) session_start();

    if(!isset(
    $_POST['submit_upload'])){

        
    header("Location: index.php");

    }else{
        unset(
    $_SESSION['complete_image_path']);
        include_once 
    'config_images.php';

        
    //faccio l'upload dell'img
        
    include_once 'class.upload.php';

        if(!isset(
    $_FILES)) $_FILES $HTTP_POST_FILES;
        if(!isset(
    $_SERVER)) $_FILES $HTTP_POST_VARS;

        
    $up = new FileUpload(TMP_DIR);

        
    //Eliminiamo gli spazi e sostituiamoli con "_"
        
    $fileIn $_FILES['browse']['name'];
        
    $fileIn str_ireplace(" ","_",$fileIn);

        
    $complete "";
        
    $id 0;
        
    $filename IMAGE_DIR.$id."_".$fileIn;

        
    //Se non esiste il file con quel nome..
        
    if(!file_exists($filename)){
            
    $complete $filename;
        }else{
            
    //Finchè esiste il file con quel nome...
            
    while(file_exists(IMAGE_DIR.$id."_".$fileIn))
            {
                
    //incrementa l'id
                
    $id++;
                
    //Crea il file con il nome : n_nomefile.ext dove n sta per un numero
                
    $complete IMAGE_DIR.$id."_".$fileIn;
            }
            
    $up->RenameFile($id."_".$fileIn);
        }
        
    $file $_FILES['browse'];
        
    $file['name'] = $id."_".$file['name'];

        
    $up->Upload($file);
        
    $_SESSION['complete_image_path'] = $complete;

        
    //adesso ridimensiono l'img a 400 x 400

        
    include_once 'class.image.php';

        
    $img = new Image(TMP_DIR $id."_".$fileIn);

        
    //creo l'immagine sorgente
        
    $result $img->CreateSourceImage();

        
    //se il tipo di immagine è supportato
        //salvo 2 file:
        //uno con l'img grande e uno con l'img piccola
        //nelle rispettive directory
        
    if($result){
            
    //salvo l'immagine con altezza 400 lasciandola proporzionata
            
    $img->SaveProportionateImage(IMAGE_DIR $id."_".$fileInIMAGE_QUALITYIMAGE_HEIGHT);
            
    //salvo l'immagine con altezza 75 lasciandola proporzionata
            
    $img->SaveProportionateImage(THUMB_DIR $id."_".$fileInTHUMB_QUALITYTHUMB_HEIGHT);
            
    //libero la memoria cancellando l'immagine sorgente
            
    $img->Free();
        }
        
    //se il tipo di img non è supportata
        //o se il file uploadato nn è un immagine
        
    else
            echo 
    'Immagine non valida
    '
    ;
        
    //In ogni caso cancello il file uploadato nella cartella ./tmp
        
    $up->DeleteFile();
    }

    ?>
    e lo richiamo da newuserform.php
    Codice PHP:
    <form action="profile/upload.php" id="browse_frm" name="browse_frm" method="post" enctype="multipart/form-data">
       <
    input name="browse" type="file" size="25" id="browse" />
       <
    input name="submit_upload" type="submit" size="20" id="update" value="Aggiorna"/>
    </
    form

  7. #7
    Rispondo al tuo primo post:
    Per quanto mi riguarda cerco sempre di puntare alla document_root e poi alle singole cartelle, quindi la cartella non sarà: images/file.jpg bensì /root/www/web/sito145/images/file.jpg
    Avevo avuto problemi anch'io all'inizio ma poi ho risolto in questo modo.
    Codice PHP:
    $filename $_SERVER['DOCUMENT_ROOT'].IMAGE_DIR.$id."_".$fileIn
    fai un'echo della variabile, così vedi se ci sono slash fuori posto!
    Ce l'ho fatta! - ItalianPixel -

  8. #8
    Ho provato con

    Codice PHP:
    $filename $_SERVER['DOCUMENT_ROOT']."/ciapaciapa/profile/".IMAGE_DIR.$id."_".$fileIn
    e il risultato è

    E:/EasyPHP-5.3.8.0/www/ciapaciapa/profile/picture/0_29082011941.jpg

    che è corretto!!! Dovrebbe vedere il file, invece non lo trova.
    Ho anche provato a combinare il tuo codice con fopen al posto di file_exists, ma nulla.

    Non capisco...sono in crisi esistenziale..

  9. #9
    Ragazzi sono disperato, non ne vengo a capo. Questa è la mia function:

    Codice PHP:
    class FileUpload{
        
    //la directory in cui verrà uploadata l'img
        
    var $up_dir;
        
    //la directory temporanea in cui verrà uploadata l'img
        
    var $up_dir_tmp;
        
    //il nome del file
        
    var $filename;
        
    //il nuovo nome del file se vogliamo rinominarlo
        
    var $new_filename;

        function 
    Upload($files){
            if(!
    file_exists($this->up_dir_tmp)){
                die(
    'La directory non esiste!');}

            if(
    trim($files["name"]) == ""){
                die(
    "Non hai indicato il file da uploadare!");}

        
    $id=0;
        
    $this->filename $files["name"];
        while(
    file_exists($this->up_dir.$this->filename))//$this->up_dir ha valore: picture/
        
    {
            
    //incrementa l'id
            
    $id++;
            
    $this->filename=$id."_".$this->filename;
        }

            if(
    is_uploaded_file($files["tmp_name"])){
                
    move_uploaded_file($files["tmp_name"],$this->up_dir_tmp.$this->filename)
                or die(
    "Impossibile spostare il file;controlla l'esistenza o i permessi della directory!");
            }else{
                die (
    "Problemi nell'upload del file ".$this->filename);}
        } 
    Non entra mai nel ciclo while, e il file esiste...non ce la faccio più, mi sembra di non avere via di uscita...mi affido alla vostra sapienza!
    Chiedetemi tutto quello di cui avete bisogno per capire quale potrebbe essere il problema.

  10. #10
    $files["name"] è valorizzato? Prova a mettere un'echo
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.