2010-10-13 14 views
5

sto eseguendo i seguenti comandi:Comando di copia PHP non riuscito quando spazi?

<?php 
copy ("http://localhost/.../DSCF8253.JPG" , "sites/default/files/DSCF8253.JPG"); // Success! 
copy ("http://localhost/.../DSCF8260.JPG" , "sites/default/files/DSCF8260.JPG"); // Success! 
copy ("http://localhost/.../HERMAN 085.jpg" , "sites/default/files/HERMAN 085.jpg"); // Fail! 
?> 

I primi due copiare bene, ma non l'ultimo. Perché?

Deve avere qualcosa a che fare con i nomi dei file (l'ultimo ha uno SPAZIO prima dello 085).

Qualsiasi aiuto sarebbe molto apprezzato!

+0

Che cosa è un 'error_reporting (E_ALL);' dire? –

+0

Hai provato a sfuggire lo spazio sostituendolo con '% 20' nell'URL? –

+0

Le directory di origine sono le stesse? – chigley

risposta

6
http://localhost/.../HERMAN 085.jpg 

dovrebbe essere

http://localhost/.../HERMAN%20085.jpg 

Copia & i wrapper http sono meno indulgente quindi i browser/user-agent quando si tratta di URL non validi. Uno spazio in un URL non è valido, quindi dovrebbe essere urlencode 'd.

+0

Ancora non funziona, ma è decisamente sulla buona strada. Ho usato urlencode senza fortuna. Qualche altro suggerimento? – coderama

+0

Se ciò non funziona, controllerò i log di accesso del server web per verificare se la richiesta è OK e restituisce i dati. Se ciò non dovesse funzionare, cercherò pacchetti come 'cURL' e' httprequest' per vedere se riescono a gestirli. – Wrikken

+0

CURL ha finito per essere la soluzione migliore. – coderama

2
//i used this code once i tried to copy images to a wordpress site and set post featured image 
//i only mentioned the part you want and did not mention other parts 
$image_url = 'http://example.com/images/my image with spaces.jpg'; 
try { 
    //throw exception if can't move the file 

    if (!copy(str_replace(" ","%20",$image_url),$file)) { 
     $errors = error_get_last(); 
     throw new Exception('Could not copy file'); 
    } 

} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
//using urlencode will corrupt the url if used with the full url 
//it will generate something like http%dsf%swdfablablabla 
//if you need to encode you will encode anything after http://yoursite.com/{encode only works here} 
1

cosa più strana: il modo% 20 non sembra fare il trucco, ma dopo qualche tentativo invano (prima con 20%, poi citando il nome del file, quindi fare doppio cita, poi spazi che proteggono , dimmi se ho perso qualcosa), ora la versione originale funziona perfettamente. Questo è Windows 10, PHP 5.5.12 e siamo nell'anno 2016. Buona fortuna con tutti questi sistemi deterministici, a stati finiti :)

una possibile soluzione a proposito, è quello di utilizzare exec() e fare un copia sul livello di sistema operativo . Poi di nuovo, è specifico per il sistema operativo.

Problemi correlati