Exécuter une commande PHP en ligne avec des fichiers JPG locaux
                    
        
     
             
                    Southstyle
    
        
    
                    Messages postés
            
                
     
             
            46
        
            
                                    Statut
            Membre
                    
                -
                                     
zermat Messages postés 160 Statut Membre -
        zermat Messages postés 160 Statut Membre -
        Bonjour, 
J'ai créé un site où, pour l'instant, je dois mettre les JPEG originaux sur le serveur pour ensuite les renommer selon un DB (les commandes des clients). Exemple : DSC_1234.jpg deviendra nom_prenom_ID.jpg (même fichier, mais renommé et sauvegardé dans un autre répertoire du serveur). Et tout fonctionne parfaitement.
Maintenant j'aimerais éviter de devoir uploader mes gros jpeg sur le serveur, mais utiliser la commande php du site pour qu'elle vienne lire le fichier localement et le sauvegarde localement également. J'ai bien conscience que ça ne marchera que sur mon disque dur (c'est le but, c'est du back office) et que si je change le répertoire ou la lettre du disque dur, ça ne marchera pas.
J'ai essayé ces trois techniques, aucune n'a fonctionné :
1) Méthode avec serveur local qui tourne (EasyPHP, apache)
$originalfile = "http://127.0.0.1/chemin/repertoire/fichier.jpg";
2) Méthode avec un serveur local (simple windows \\nomserveur)
$originalfile = "\\\\nomserveur\\chemin\\repertoire\\fichier.jpg";
3) Méthode lien absolu
$originalfile = "file:///C|/chemin/repertoire/fichier.jpg
Ensuite j'exécute ainsi : copy($originalfile,$newfile);
Faut-il faire un fopen() d'abord ?
Précisons encore que si je tape une de ces adresse dans le navigateur, j'arrive à voir le JPEG dans le navigateur. Mais le PHP ne le prend pas en compte.
Dois-je adapter mon code ? Dois-je modifier les paramètres du serveur ? Les voici : https://app.box.com/representation/file_version_15716849020/image_2048/1.png?shared_name=jncujqbat9as3lqlrs0e
Merci pour votre précieuse aide !
Raph
            
            
                
            
                
    
    
    
        J'ai créé un site où, pour l'instant, je dois mettre les JPEG originaux sur le serveur pour ensuite les renommer selon un DB (les commandes des clients). Exemple : DSC_1234.jpg deviendra nom_prenom_ID.jpg (même fichier, mais renommé et sauvegardé dans un autre répertoire du serveur). Et tout fonctionne parfaitement.
Maintenant j'aimerais éviter de devoir uploader mes gros jpeg sur le serveur, mais utiliser la commande php du site pour qu'elle vienne lire le fichier localement et le sauvegarde localement également. J'ai bien conscience que ça ne marchera que sur mon disque dur (c'est le but, c'est du back office) et que si je change le répertoire ou la lettre du disque dur, ça ne marchera pas.
J'ai essayé ces trois techniques, aucune n'a fonctionné :
1) Méthode avec serveur local qui tourne (EasyPHP, apache)
$originalfile = "http://127.0.0.1/chemin/repertoire/fichier.jpg";
2) Méthode avec un serveur local (simple windows \\nomserveur)
$originalfile = "\\\\nomserveur\\chemin\\repertoire\\fichier.jpg";
3) Méthode lien absolu
$originalfile = "file:///C|/chemin/repertoire/fichier.jpg
Ensuite j'exécute ainsi : copy($originalfile,$newfile);
Faut-il faire un fopen() d'abord ?
Précisons encore que si je tape une de ces adresse dans le navigateur, j'arrive à voir le JPEG dans le navigateur. Mais le PHP ne le prend pas en compte.
Dois-je adapter mon code ? Dois-je modifier les paramètres du serveur ? Les voici : https://app.box.com/representation/file_version_15716849020/image_2048/1.png?shared_name=jncujqbat9as3lqlrs0e
Merci pour votre précieuse aide !
Raph
        A voir également:         
- Exécuter une commande PHP en ligne avec des fichiers JPG locaux
- Invite de commande - Guide
- Partager des photos en ligne - Guide
- Renommer des fichiers en masse - Guide
- Mètre en ligne - Guide
- Commande terminal mac - Guide
4 réponses
                        
                    En faite copy fonctionne comme ça:
copy('C:/chemin/dossier/fichier.jpg', 'D:/chemin2/dossier2/fichier2.jpg');
Sinon qu'elle est le message d'erreur que vous obtenez
    
                copy('C:/chemin/dossier/fichier.jpg', 'D:/chemin2/dossier2/fichier2.jpg');
Sinon qu'elle est le message d'erreur que vous obtenez
                        
                    Dans ce cas c'est compliqué:
$originalfile = "http://votre-adresse-ip-publique/chemin/repertoire/fichier.jpg";
Régler apache en locale pour accepter les requêtes venant de l'extérieur
Régler le firewall pour accepter les connexions sur le port 80
Faite un NAT du port 80 si vous utilisé un routeur
Activez allow_url_fopen dans les paramètres du serveur
...
    
                $originalfile = "http://votre-adresse-ip-publique/chemin/repertoire/fichier.jpg";
Régler apache en locale pour accepter les requêtes venant de l'extérieur
Régler le firewall pour accepter les connexions sur le port 80
Faite un NAT du port 80 si vous utilisé un routeur
Activez allow_url_fopen dans les paramètres du serveur
...
    Ou la laaaa... ça me semble être autant de failles pour pénétrer mon ordi.
Donc si j'ai bien compris, je dois modifier les paramètres du serveur web sur allow_url_fopen, modifier mon serveur local apache pour accepter les requêtes externes et modifier les paramètres de mon routeur / firewall ?
Si j'essaie d'afficher une image avec les trois méthodes citées au tout début de ce fil, ça marche. Les photos s'affichent dans le navigateur.
Si j'essaie d'afficher les images avec la technique http://monadressepublique/chemin/.... alors j'arrive sur l'écran d'accueil de connexion à mon routeur.
C'est donc ça la bonne piste ?
    Donc si j'ai bien compris, je dois modifier les paramètres du serveur web sur allow_url_fopen, modifier mon serveur local apache pour accepter les requêtes externes et modifier les paramètres de mon routeur / firewall ?
Si j'essaie d'afficher une image avec les trois méthodes citées au tout début de ce fil, ça marche. Les photos s'affichent dans le navigateur.
Si j'essaie d'afficher les images avec la technique http://monadressepublique/chemin/.... alors j'arrive sur l'écran d'accueil de connexion à mon routeur.
C'est donc ça la bonne piste ?
                        
                    oui si vous arrivez sur l'écran d'acceuil de connexion à votre routeur ce qui qui signifie qui vous n'avez pas fait le NAT correctement. NAT signifie Network Address Translation. faite une recherche sur le  Network Address Translation pour comprendre comment ça fonctionne.
Sinon à mon avis le plus simple c'est d'exécuter le code PHP sur votre serveur local en utilisant le ftp par exemple:
à vous de voir
    
                Sinon à mon avis le plus simple c'est d'exécuter le code PHP sur votre serveur local en utilisant le ftp par exemple:
<?php
$original_file = 'image.jpg';
$remote_file = 'nom-image.jpg';
$ftp_server = 'adresse-de-ton-serveur';
$user_name = ''; //votre login
$user_pass = '';  //votre mot de passe
$conn = ftp_connect($ftp_server);
ftp_login($conn, $user_name, $user_pass);
// Charge l'image
if (ftp_put($conn, $remote_file, $original_file, FTP_BINARY)) {
 echo "Le fichier a été chargé avec succès\n";
} else {
 echo "Il y a eu un problème lors du chargement du fichier\n";
}
// Fermeture de la connexion
ftp_close($conn);
?>
à vous de voir
 
    
    
    
    
j'obtiens "Fichier non accessible", donc le code PHP ne peut pas lire le fichier sur mon disque dur.
J'ai tenté le copy('C:/....', 'S:/...') mais idem, les fichiers ne sont pas accessibles.
En fait je vérifie d'abord la présence du fichier (!is_file()) avant de faire copy().