Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1676 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème : Fonction Copy PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème : Fonction Copy PHP

n°1061368
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 15:17:16  profilanswer
 

Bonjour à tous, :)
 
Me voici confronté à un problème.
 
Je suis en train de développer une application Web permettant de visualiser le flux vidéo d'une caméra IP.
Dans cette application, l'utilisateur peut prendre des photos.
Une fois la photo prise, l'utilisateur peut annuler ou enregistrer cette image.
Le problème, c'est que la photo que je prend est en fait l'image filmée au moment où l'utilisateur clique sur "Prendre une photo". Donc au moment où il décide d'enregistrer cette photo, cela me prend l'image filmée au moment où il clique sur "enregistrer" (donc pas la même que celle précédente).
 
Par conséquent, je dois stocker temporairement la première image (celle au moment précis où l'utilisateur a cliqué sur "Prendre une photo" ).
 
J'en viens à ma requête, j'utilise pour cela la fonction Copy que propose PHP 5.
Mais, au moment où la photo est censée être copiée sur mon server. Un message d'erreur s'affiche, le voici :
 
/*-------------------------------------------------------------*/
 
Warning: copy(http://192.168.0.99/cgi-bin/video.jpg) [function.copy]: failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in /var/www/html/william/gestion_photo.php on line 61
 
/*-------------------------------------------------------------*/
/*-------------------------------------------------------------*/
 
Et voici mon code associé :
 
$aujourdhui = date('Y-m-d'); // Format AAAA-MM-JJ
$heure = date('G:i:s'); // Format HH:MN:SS
// Nom donné à l'image
$new_nom = $aujourdhui.'_'.$heure;
// Chemin où sera placée l'image temporairement
$chemin_temp = 'http://192.168.0.99/william/camera/images/temp/temp_'.$new_nom.'.jpg';
copy('http://192.168.0.99/cgi-bin/video.jpg', $chemin_temp);
 
/*-------------------------------------------------------------*/
 
A noter que : http://192.168.0.99/cgi-bin/video.jpg correspond à l'image récupérée sur la caméra IP.
 
Bref, de ce que j'ai compris, il m'est impossible de copier l'image filmée par la caméra (Pas les droits).
 
Donc, pour le moment j'ai une fenêtre IE avec une photo de ce type :
 
http://perso.wanadoo.fr/ptitcalvin/Camera/imprim_ecran_camera.jpg
 
Je voudrai donc pouvoir copier cette image temporairement sur mon serveur.
Mais comment faire ???
N'y aurait il pas moyen de "bidouiller" en créant un script avec l'utilisation du IMPRIM ECRAN pour découper "pil poil" l'image ?
 
Je suis assez sceptique.
 
N'hésitez pas à me donner votre point de vue, ils seront tous bons à prendre. :)
 
Merci à vous.
 
Fiiies ;)

mood
Publicité
Posté le 26-04-2005 à 15:17:16  profilanswer
 

n°1061391
KangOl
Profil : pointeur
Posté le 26-04-2005 à 15:22:06  profilanswer
 

tu peux pas utiliser le protocol http avec copy, faut utiliser le chemin direct sur le serveur...


---------------
Nos estans firs di nosse pitite patreye...
n°1061417
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 15:33:05  profilanswer
 

Citation :

tu peux pas utiliser le protocol http avec copy, faut utiliser le chemin direct sur le serveur...


 
Hum, le problème, c'est que je suis obligé de passer par le protocol HTTP pour récupérer le flux vidéo de la caméra.
 
Au fait, toute petite erreur au niveau du code que j'avais donné :
 
$chemin_temp = 'http://192.168.0.99/william/camera/images/temp/temp_'.$new_nom.'.jpg';  
Remplacé par :
$chemin_temp = 'http://192.168.0.103/william/camera/images/temp/temp_'.$new_nom.'.jpg';
 
Bref, je ne sais pas trop où me diriger.
 
Si vous avez d'autres solutions...
 
Merci de la réponse déja !
 
Fiiies

n°1061428
mathix
mathix@jabber.org
Posté le 26-04-2005 à 15:37:38  profilanswer
 

Fiiies1 a écrit :

Hum, le problème, c'est que je suis obligé de passer par le protocol HTTP pour récupérer le flux vidéo de la caméra.


explique nous comment tu récupères l'image en PHP en passant par l'http

n°1061445
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 15:46:51  profilanswer
 

Citation :

explique nous comment tu récupères l'image en PHP en passant par l'http


 
Concrètement, l'image que je récupère est une sorte d'image dynamique.
J'ai pu récupérer le flux vidéo de la caméra via du javascript que j'ai inclus dans du PHP (afin de gérer la résolution).
Voici la ligne qui nous intéresse dans le javascript :
 
/*------------------------------------------------*/
 
echo "\ndocument.write(\"<PARAM NAME='Url' VALUE='http://192.168.0.99:80/cgi-bin/video.vam'>\" )";
 
/*------------------------------------------------*/
 
L'URL en gras est donc le flux vidéo de la caméra.
Pour récupérer seulement une image de cette caméra, il me suffit de remplacer le .vam en .jpg :
   
http://192.168.0.99:80/cgi-bin/video.jpg
 
C'est pour cette raison que si j'actualise la fenêtre où se trouve la "pseudo photo", celle ci est modifiée.
Pour afficher la photo, je fais tout simplement ça :
 
echo "<center><img src=\"http://192.168.0.99/cgi-bin/video.jpg\" width=\"$largeur\" height=\"$hauteur\"></center>";
$largeur et $hauteur étant des variables que je récupère en paramètre afin d'ajuster la taille de la photo en fonction de la résolution (160*120, 320*240 ou 640*480).
 
J'espère avoir été clair ;).
 
Qu'en pensez vous ?
 
Merci.
 
Fiiies ;)

n°1061451
KangOl
Profil : pointeur
Posté le 26-04-2005 à 15:50:07  profilanswer
 

au fait faut que le deuxieme argument de ton copy soit un chemin local...


---------------
Nos estans firs di nosse pitite patreye...
n°1061474
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 16:05:32  profilanswer
 

Citation :

au fait faut que le deuxieme argument de ton copy soit un chemin local...


 
Justement, c'est là que se situe le problème. Que ce soit le premier ou le second argument, il ne gère pas le protocol HTTP.
 
J'ai beau modifier par :
 
$chemin_temp = '/var/www/html/william/camera/images/temp/temp_'.$new_nom.'.jpg';
copy('http://192.168.0.99/cgi-bin/video.jpg', $chemin_temp);
 
Ca ne marche toujours pas.
 
Il me faudrait une "fonction" ou "script" gérant ce protocol HTTP, qui me bloque définitivement ! :sarcastic:  
Et bon, n'étant que novice en programmation (DUT Info deuxième année), je ne vois pas trop où me diriger malgré mes multiples recherches.
 
Bref, merci pour les réponses, c'est bien sympa.
 
Fiiies.


Message édité par Fiiies1 le 26-04-2005 à 16:06:10
n°1061475
KangOl
Profil : pointeur
Posté le 26-04-2005 à 16:06:13  profilanswer
 

lis ca : http://be2.php.net/copy


---------------
Nos estans firs di nosse pitite patreye...
n°1061482
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 16:09:13  profilanswer
 

Citation :

lis ca : http://be2.php.net/copy


 
Oui, je suis déja tombé une dizaine de fois sur des sites repompants en intégralité l'aide PHP 'php_manual_fr.chm'.
 
J'ai l'aide lancée depuis le début de l'après midi, donc je commence à connaitre l'article :D.
 
Merci quand même.
 
Fiiies

n°1061501
Flaie
No it's necessary
Posté le 26-04-2005 à 16:27:37  profilanswer
 

tu peux pas faire un fopen directement sur l'image en mode rb, tu recupere tout, et tu sauvegarde ce que t'as recuperé.  
ça devrait le faire ?
un truc dans ce style :

Code :
  1. <?php
  2. $fi = fopen('http://192.168.0.99/cgi-bin/video.jpg', "rb" );
  3. $data = "";
  4. while( !feof($fi) )
  5.    $data .= fread($fd, 4096);
  6. fclose($fi);
  7. $fo = fopen($chemin_temp, "wb" );
  8. fwrite($fo, $data);
  9. fclose($fo);
  10. ?>


---------------
Always wear a camera!
mood
Publicité
Posté le 26-04-2005 à 16:27:37  profilanswer
 

n°1061529
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 16:39:15  profilanswer
 

Citation :

tu peux pas faire un fopen directement sur l'image en mode rb, tu recupere tout, et tu sauvegarde ce que t'as recuperé.  
ça devrait le faire ?


 
Salut Flaie,
 
Je viens d'essayer le script et ça a l'air de boucler indéfiniment. La fenêtre devient inacessible.
Je n'ai pas trop compris : !feof($fi). En gros, je boucle tant que ce que j'ai ouvert dans $fi n'est pas terminé ?
Or ce qui me fait "peur", c'est que comme http://192.168.0.99/cgi-bin/video.jpg est une sorte d'image dynamique, elle ne se termine jamais. D'où peut être le fait que ça boucle dans le vide.
(Je suis peut être totalement HS).
 
Donc concrètement, si j'ai bien compris, tu récupères tout ce qu'il y a dans http://192.168.0.99/cgi-bin/video.jpg, puis tu copies tout cela dans "/var/www/html/william/camera/images/temp/temp_'.$new_nom.'.jpg" ?
 
Ca me semble faisable, mais là, ça semble tourner en rond.  :sarcastic:  
 
Merci en tout cas.
 
EDIT : ah oui, j'oubliais, quelle est cette variable ? => $data .= fread($fd, 4096);
 
Thanks ! :)


Message édité par Fiiies1 le 26-04-2005 à 16:41:46
n°1061563
mathix
mathix@jabber.org
Posté le 26-04-2005 à 16:53:35  profilanswer
 

Fiiies1 a écrit :

EDIT : ah oui, j'oubliais, quelle est cette variable ? => $data .= fread($fd, 4096);


bien vu il s'agit d'une erreur, c'est $fi qu'il voulait mettre

n°1061588
Flaie
No it's necessary
Posté le 26-04-2005 à 17:05:57  profilanswer
 

ouais excuse j'ai tapé ça dans le petit quick reply et comme après j'ai changé le nom de la var c'est pour ça que ça ne devait pas fonctionner
ça marche là ? (si l'image change tout le temps ça risque de manger pas mal de ressource quand même, je sais pas trop)


---------------
Always wear a camera!
n°1061604
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 17:12:30  profilanswer
 

Citation :

ouais excuse j'ai tapé ça dans le petit quick reply et comme après j'ai changé le nom de la var c'est pour ça que ça ne devait pas fonctionner
ça marche là ? (si l'image change tout le temps ça risque de manger pas mal de ressource quand même, je sais pas trop)


 
 
Euh, ba en fait, j'ai testé dans un premier temps en ayant "lu" rapidement le code.
Ca tournait en boucle.
J'ai par la suite relu le code correctement, et j'ai vu cette variable étrange que j'ai modifiée par $fi.
Et rien ne fait, ça tourne toujours en boucle.
 
Je ne sais pas trop pourquoi à vrai dire.
J'ai essayé d'inclure un echo dans le while, afin de voir si ça bouclait vraiment :
 

Code :
  1. $test = 1;
  2. $fi = fopen('http://192.168.0.99/cgi-bin/video.jpg', "rb" );
  3. $data = ""; 
  4. while( !feof($fi) )
  5. {
  6.    $data .= fread($fi, 20);
  7.    echo "<b>$test ";
  8.    $test++;
  9. }
  10. fclose($fi);

 
 
Mais, rien n'est affiché... Donc je pense que c'est le flux vidéo qui fait saturer les ressources du PC.
Bref, je fouine depuis tout à l'heure sur google, mais rien n'y fait, je ne trouve rien. :sarcastic:  
 
Ca m'agace cette histoire :na:.
 
Merci pour le temps consacré sur mon problème.
 
Fiiies


Message édité par Fiiies1 le 26-04-2005 à 17:13:06
n°1061643
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 17:40:20  profilanswer
 

J'ai laissé tourner la page qui tournait dans le vide. Elle s'est donc arrétée 5 10mn après :D :
 
Verdict, erreurs aux lignes 59 et 61, puis 59 et 61, et ainsi de suite.
 
Ces deux lignes sont :
 
while( !feof($fi) )
{
     $data .= fread($fi, 20);
}
 
PS : je me suis permis de recréer un post, car si j'éditais le précédent, vous n'alliez surement pas vous en rendre compte... ;)
 
Merci

n°1061645
KangOl
Profil : pointeur
Posté le 26-04-2005 à 17:41:24  profilanswer
 

pourquoi ne pas directement utiliser soit
1/ file_get_contents
2/ imagecreatefromjpeg ?


---------------
Nos estans firs di nosse pitite patreye...
n°1061661
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 18:00:19  profilanswer
 

Citation :

pourquoi ne pas directement utiliser soit :
1/ file_get_contents
2/ imagecreatefromjpeg ?


 
1/ J'ai essayé :
 

Code :
  1. $mon_image = file_get_contents("http://192.168.0.99/cgi-bin/video.jpg" );


 
Voici mon message d'erreur :
Warning: file_get_contents(http://192.168.0.99/cgi-bin/video.jpg) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in /var/www/html/william/gestion_photo.php on line 57
 
Ligne 57 (la même que j'ai écrite, forcément) :

Code :
  1. $mon_image = file_get_contents("http://192.168.0.99/cgi-bin/video.jpg" );


 
2/ J'ai essayé :
 

Code :
  1. $im = imagecreatefromjpeg("http://192.168.0.99/cgi-bin/video.jpg" ); /* Tentative d'ouverture */


 
Voici mon message d'erreur :
Fatal error: Call to undefined function imagecreatefromjpeg() in /var/www/html/william/gestion_photo.php on line 57
 
Ligne 57 (la même que j'ai écrite, forcément) :

Code :
  1. $im = imagecreatefromjpeg("http://192.168.0.99/cgi-bin/video.jpg" ); /* Tentative d'ouverture */


 
Bref, j'ai comme l'impression que j'ai fait un Copier Coller (tentative, réponse, ligne d'erreur) pour ces deux fonctions  :fou:. J'ai exactement les mêmes erreurs.
 
Pourtant, quand je lis l'aide PHP, ces deux fonctions me paraissent possibles à utiliser dans ma situation...  :sarcastic:  
 
Thanks quand même KangOl.
 
EDIT : ah oui effectivement, pas les mêmes erreurs, j'me suis emporté un peu vite :p.


Message édité par Fiiies1 le 26-04-2005 à 18:05:53
n°1061663
cesarr89
Posté le 26-04-2005 à 18:02:22  profilanswer
 

Euh attends déjà c'est pas les mêmes erreurs.
Ensuite regarde bien pour imagecreatefromjpeg().
Faut bien lire les erreurs aussi.

n°1061668
Flaie
No it's necessary
Posté le 26-04-2005 à 18:05:10  profilanswer
 

t'as peut-être pas la lib gd d'installé ou d'activé si il trouve pas imagecreatefromjpeg()
 
si ça tourne dans le vide c'est peut-être que vu que ton image change constamment le script arrive jamais à la fin du fichier donc tu reste dans le while, ou peut-être qu'il perds le handle vers le fichier.
 
je sais pas comment tu peux faire si l'image change constamment.


---------------
Always wear a camera!
n°1061672
cesarr89
Posté le 26-04-2005 à 18:08:35  profilanswer
 

C'est meme sur et certain que y'a un probleme avec la lib, sinon y'aurais pas cette erreur.

n°1061680
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 18:17:53  profilanswer
 

Citation :

C'est meme sur et certain que y'a un probleme avec la lib, sinon y'aurais pas cette erreur.


 

Citation :

t'as peut-être pas la lib gd d'installé ou d'activé si il trouve pas imagecreatefromjpeg()


 
Euh, je viens de discuter avec le "technicien" de la boite où je fais mon stage, et effectivement, il m'a dit qu'il n'a pas réinstallé la librairie GD.
Il avait essayé mais ça avait complètement foiré apparemment donc bon... Je suis un peu bloqué là!
 
Y aurait pas des alternatives possibles ?
 
Merci en tous les cas ;).

n°1061682
cesarr89
Posté le 26-04-2005 à 18:20:33  profilanswer
 

De rien.
Des alternatives,....je suis dsl mais je peux pas t'aider plus, parce que je voie pas trop les alternatives possibles.

n°1061688
KangOl
Profil : pointeur
Posté le 26-04-2005 à 18:32:04  profilanswer
 

je comprend pas comment ton script arrive a afficher l'image et en meme temps n'arrive pas a la lire...


---------------
Nos estans firs di nosse pitite patreye...
n°1061697
Fiiies1
Jase From Outta Space
Posté le 26-04-2005 à 18:43:20  profilanswer
 

Citation :

je comprend pas comment ton script arrive a afficher l'image et en meme temps n'arrive pas a la lire...


 
Donc, au moment où je clique sur "prendre une photo", j'insère une image dans une nouvelle fenêtre :
 

Code :
  1. echo "<center><img src=\"http://192.168.0.99/cgi-bin/video.jpg\" width=\"$largeur\" height=\"$hauteur\"></center>";


 
Le flux vidéo de la caméra IP est accessible par :
http://192.168.0.99/cgi-bin/video.vam
Le .vam est en fait du .bmp destiné au flux vidéo (d'après mes recherches).
 
Le .bmp étant nettement supérieur au .jpg au niveau du poids, la caméra D-Link propose de récupérer une image .jpg en remplaçant le .vam par le .jpg tout simplement. :
http://192.168.0.99/cgi-bin/video.jpg
 
Le "truc", c'est que cette image est sans cesse différente si l'on réactualise la page (en effet, on lit une image instantanément sur un flux vidéo).
Donc, au moment où je souhaite copier l'image récupérée, forcément ça boucle car l'url de mon image récupérée est l'adresse IP de la caméra donc du flux vidéo.
 
Je ne sais pas si je me suis fait comprendre... :sarcastic:  
 
Là j'ai fini ma journée, je rentre chez moi :p.
Je jetterai un coup d'oeil s'il y a eu des réponses, sinon à demain ;).
 
Merci pour votre aide, très utile mine de rien. Ca me permet de me familiariser avec des fonctions dont j'ignorais l'existance.
 
PS : pour ceux qui sont intéressés, la librairie GD est disponible ICI !
 
Bonne soirée.
 
Fiiies ;)

n°1061706
KangOl
Profil : pointeur
Posté le 26-04-2005 à 19:04:48  profilanswer
 

alors a quoi sert un bouton "sauver" si l'utilisateur veux sauver l'image, il n'a cas faire "clcik droit > enregistrer l'image sous" :spamafote:


---------------
Nos estans firs di nosse pitite patreye...
n°1062226
Fiiies1
Jase From Outta Space
Posté le 27-04-2005 à 09:22:30  profilanswer
 

Citation :

alors a quoi sert un bouton "sauver" si l'utilisateur veux sauver l'image, il n'a cas faire "clcik droit > enregistrer l'image sous" :spamafote:


 
Je viens d'en discuter avec mon maitre de stage...
Donc deux alternatives possible font face à moi :
 
- Stocker temporairement l'image, et la supprimer si l'utilisateur clique sur "Annuler", ou la stocker si l'utilisateur clique sur "Enregistrer".
 
- Stocker l'image lorsque l'utilisateur clique sur enregistrer, en récupérant l'image stockée dans la Ram puisqu'elle est affichée dans la fenêtre. En effet, le clique droit => "Enregistrer image sous" fonctionne parfaitement KangOl. Bref, méthode que je ne connais pas du tout. :sarcastic:  
 
Il serait mieux d'opter pour la première méthode étant donné que celle ci se montre plus convenable pour la gestion des photos.
 
Concrètement, ce qui me bloque actuellement, c'est de copier l'image de la caméra  (soit http://192.168.0.99/cgi-bin/video.jpg) dans un répertoire temporaire de mon Server de développement (soit http://192.168.0.103/william/camera/images/temp/ (pareil que /var/www/html/william/camera/images/temp/) avec pour nom d'image temp_'.$new_nom.'.jpg).
 
La fonction "copy" me génère une erreur car elle ne gère pas le protocole HTTP.
De même pour la fonction "file_get_contents".
Le server n'a pas la librairie "GD" donc impossible d'utiliser la fonction "imagecreatefromjpeg".
Le server n'est pas non plus configuré pour utiliser les fonctions FTP que propose PHP 5.
 
Que faire ? :sarcastic:  
 
Si certains ont des informations sur la seconde méthode, je suis preneur !
 
Merci à vous.
 
Fiiies. ;)


Message édité par Fiiies1 le 27-04-2005 à 09:24:31
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème : Fonction Copy PHP

 

Sujets relatifs
Problème installation Apache et PHPprobleme avec les sessions
[JAVA] Euh... Problème d'affichage [résolu]acceder a une page en fonction dun champ
excel formules probleme de base[Flash] problème de concaténation d'un nom de var dynamique
Appeler une fonction php avec du javascriptProbleme d'instalation de PHP 5 sous IIS 5 !
Plus de sujets relatifs à : Problème : Fonction Copy PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR