Problème : Fonction Copy PHP - PHP - Programmation
Marsh Posté le 26-04-2005 à 15:22:06
tu peux pas utiliser le protocol http avec copy, faut utiliser le chemin direct sur le serveur...
Marsh Posté le 26-04-2005 à 15:33:05
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
Marsh Posté le 26-04-2005 à 15:37:38
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
Marsh Posté le 26-04-2005 à 15:46:51
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
Marsh Posté le 26-04-2005 à 15:50:07
au fait faut que le deuxieme argument de ton copy soit un chemin local...
Marsh Posté le 26-04-2005 à 16:05:32
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 !
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.
Marsh Posté le 26-04-2005 à 16:06:13
ReplyMarsh Posté le 26-04-2005 à 16:09:13
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 .
Merci quand même.
Fiiies
Marsh Posté le 26-04-2005 à 16:27:37
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 :
|
Marsh Posté le 26-04-2005 à 16:39:15
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é. |
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.
Merci en tout cas.
EDIT : ah oui, j'oubliais, quelle est cette variable ? => $data .= fread($fd, 4096);
Thanks !
Marsh Posté le 26-04-2005 à 16:53:35
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
Marsh Posté le 26-04-2005 à 17:05:57
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)
Marsh Posté le 26-04-2005 à 17:12:30
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 |
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 :
|
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.
Ca m'agace cette histoire .
Merci pour le temps consacré sur mon problème.
Fiiies
Marsh Posté le 26-04-2005 à 17:40:20
J'ai laissé tourner la page qui tournait dans le vide. Elle s'est donc arrétée 5 10mn après :
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
Marsh Posté le 26-04-2005 à 17:41:24
pourquoi ne pas directement utiliser soit
1/ file_get_contents
2/ imagecreatefromjpeg ?
Marsh Posté le 26-04-2005 à 18:00:19
Citation : pourquoi ne pas directement utiliser soit : |
1/ J'ai essayé :
Code :
|
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 :
|
2/ J'ai essayé :
Code :
|
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 :
|
Bref, j'ai comme l'impression que j'ai fait un Copier Coller (tentative, réponse, ligne d'erreur) pour ces deux fonctions . J'ai exactement les mêmes erreurs.
Pourtant, quand je lis l'aide PHP, ces deux fonctions me paraissent possibles à utiliser dans ma situation...
Thanks quand même KangOl.
EDIT : ah oui effectivement, pas les mêmes erreurs, j'me suis emporté un peu vite .
Marsh Posté le 26-04-2005 à 18:02:22
Euh attends déjà c'est pas les mêmes erreurs.
Ensuite regarde bien pour imagecreatefromjpeg().
Faut bien lire les erreurs aussi.
Marsh Posté le 26-04-2005 à 18:05:10
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.
Marsh Posté le 26-04-2005 à 18:08:35
C'est meme sur et certain que y'a un probleme avec la lib, sinon y'aurais pas cette erreur.
Marsh Posté le 26-04-2005 à 18:17:53
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 .
Marsh Posté le 26-04-2005 à 18:20:33
De rien.
Des alternatives,....je suis dsl mais je peux pas t'aider plus, parce que je voie pas trop les alternatives possibles.
Marsh Posté le 26-04-2005 à 18:32:04
je comprend pas comment ton script arrive a afficher l'image et en meme temps n'arrive pas a la lire...
Marsh Posté le 26-04-2005 à 18:43:20
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 :
|
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...
Là j'ai fini ma journée, je rentre chez moi .
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
Marsh Posté le 26-04-2005 à 19:04:48
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"
Marsh Posté le 27-04-2005 à 09:22:30
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" |
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.
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 ?
Si certains ont des informations sur la seconde méthode, je suis preneur !
Merci à vous.
Fiiies.
Marsh Posté le 26-04-2005 à 15:17:16
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 :
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