Exécuter une commande PHP en ligne avec des fichiers JPG locaux

Fermé
Southstyle Messages postés 46 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 26 mars 2021 - Modifié par Southstyle le 20/06/2014 à 10:19
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 - 26 juin 2014 à 17:37
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

4 réponses

zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
20 juin 2014 à 19:37
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
0
Southstyle Messages postés 46 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 26 mars 2021
23 juin 2014 à 09:51
Comme j'ai mis if (!is_file($originalfile)) { $returnmessage = "Fichier non accessible"; }
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().
0
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
23 juin 2014 à 11:43
$originalfile existe sur le même ordinateur où s'exécute PHP ou sur un ordinateur différent ?
0
Southstyle Messages postés 46 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 26 mars 2021
23 juin 2014 à 11:47
Le fichier PHP est stocké sur un serveur internet distant, mais sinon oui, j'utilise l'ordinateur qui contient $originalfile.
0
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
23 juin 2014 à 12:36
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
...
0
Southstyle Messages postés 46 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 26 mars 2021
26 juin 2014 à 12:06
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 ?
0
zermat Messages postés 160 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2016 16
26 juin 2014 à 17:37
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:

<?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
0