Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    sostituire backslashes multipli con uno singolo

    Ciao a tutti!
    Vi spiego il mio problema: ho realizzato uno script che fa l'upload di un'immagine sul server tramite FTP.
    Su localhost funziona alla perfezione... mettendolo on-line, invece, ho notato che al percorso assoluto del file da caricare (per esempio C:\Documents and Settings\mionome\Desktop\file.jpg) vengono aggiunti da non so chi (perche' non uso la funzione addslashes()) degli slash in piu' (cioe' il percorso del file diventa C:\\\\Documents and Settings\\\\mionome\\\\Desktop\\\\file.jpg).
    Per questo il file non viene trovato e mi da' errore di upload. Basterebbe sostituire le quattro \\\\ con una sola \.
    Pero' ho provato in tutti i modi e non ci riesco
    Ho provaro a fare stripslashes e stripcslashes, e il risultato e' C:\\Documents and Settings\\mionome\\Desktop\\file.jpg, che non va bene...
    Ho provato a fare str_replace("\\\\\\\\", "\\", $nomefile); ma niente, il risltato e' ancora C:\\Documents and Settings\\mionome\\Desktop\\file.jpg...
    Allora ho provato a usare l'entita' HTML corrispondente a \ ed ho fatto:

    codice:
    $nomefile = stripslashes($nomefile);
    $nomefile = str_replace("\\\\", "<qui l'entita' HTML per \ >", $nomefile);
    e stavolta addirittura il risultato e' addirittura soltanto C: !!!

    Non so piu' che fare, conoscete qualche funzione che puo' essermi utile?

    Grazie!!!

  2. #2
    per i path dovresti usare lo slash. Usando il backslash, siccome lo stesso e' pure usato come carattere di *escape*, il magic_quote ad ON lo inserisce doppio per chiarire che si tratta di un carattere divisore e non di un carattere di controllo.

    Tu usa sempre lo slash ed hai superato il problema.

    $path = "C:/Documents and Settings/mionome/Desktop/file.jpg";

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Grazie per la risposta!
    Ho provato a fare
    codice:
    $source_file = str_replace("\\\\", "/", $source_file);
    ed il persorso del file adesso risulta correttamente C:/Documents and Settings/mionome/Desktop/file.jpg

    pero' dice lo stesso "file not found" non lo trova!
    Forse per Windows gli slash "normali" non vanno bene? (il server su cui ho il sito e' linux).
    Esiste qualche modo per disabilitare da codice i magic quotes? (non ho accesso al php.ini perche' uso un servizio di hosting).
    Non so piu' che fare, ho provato anche la funzione
    codice:
    $source_file = str_replace("\\\\", chr(92), $source_file);
    ma niente...

  4. #4
    Niente, ho provato con set_magic_quotes_runtime(0); e con ini_set(magic_quotes_gpc, 0); , ma niente da fare, aggiunge lo stesso i backslashes


  5. #5
    il path deve trovarsi tra doppi apici. Occhio anche che non tutti gli OS accettano spazi nel nome di file/directory.

    il fatto che non trovi il file fuori dalla document root e' del tutto normale. metti il file in un path accessibile ad apache o quello che usi...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Ho provato anche senza spazi, non funziona lo stesso

    il file C:/file.jpg che dev'essere caricato in /files/file.jpg nel server.

    il fatto che non trovi il file fuori dalla document root e' del tutto normale. metti il file in un path accessibile ad apache o quello che usi
    Il fatto e' che vorrei che il file fosse preso da una qualsiasi directory del file system locale (come mi permetteva di fare quando ero su localhost, che funzionava!), per essere caricato su una cartella del server apache in remoto tramite FTP.

    Se devo mettere manualmente il file in un posto "visibile" ad apache lo script diventa inutile

    Questo e' lo script che uso:

    codice:
    $destfolder="files";
    // nome del file destinazione
    $destname = $destfolder."/".$_FILES['userfile']['name'];
    ...
    
    // connessione FTP
    $ftp_server = "URLDelServerFtp";
    $ftp_user_name = "xxxxxxxx";
    $ftp_user_pass = "xxxxxxxx";
    
    // percorso di destinazione completo del file da caricare
    $destination_file = "/".$destname;
    
    // path completo sul file system locale del file da caricare
    // $POST['percorso'] vale per esempio C:\file.jpg
    $source_file = $_POST['percorso'];
    
    $conn_id = ftp_connect($ftp_server); 
    
    // login con user name e password
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
    
    // controllo della connessione
    if((!$conn_id) || (!$login_result))
    	{ 
    	 echo "errore connessione FTP";
           	 die(); 
    	}
        	
    else
           	{
    	}
    
    // sostituisco i \\\\ del percorso del file (aggiunti dal magic quotes) con /
    $source_file = str_replace("\\\\", "/", $source_file);
    
    //upload del file
    $upload = @ftp_put($conn_id, "{$destination_file}", "{$source_file}", FTP_BINARY);
    	 	 
    // controllo dello stato di upload
    if(!$upload)
    	{
             $error = 2;
        	}
        	
    // se tutto va per il verso giusto (connessione FTP e upload)
    else
            {
              ..... crea thumbnail dell'immagine ecc.
            }

  7. #7
    Ho provato anche a mettere i percorsi "a mano"
    codice:
    $upload = @ftp_put($conn_id, "/draws/file.jpg", "C:/file.jpg", FTP_BINARY);
    ma niente, non ne vuole sapere di fare l'upload...

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.