[presque RESOLU] PHP en ligne de commande, traitement hebdo

PHP en ligne de commande, traitement hebdo [presque RESOLU] - PHP - Programmation

Marsh Posté le 29-06-2004 à 13:53:49    

Bonjour !!!
 
Je rame depuis plusieurs jours sur un problème qui peut paraître simple
pour certains .... mais qui pour moi me parait ... une montagne...
 
Donc voici le contexte :
Serveur Win2000 avec EasyPHP avec PHP en version 4.2.0
 
en fait je souhaiterais faire un traitement hebdomadaire en PHP  
(avec Accès à une BD Oracle et Envoi de mail)
 
Etape 1 (effectuée) : création du fichier qui interroge la base et envoie le mail  
 
puis la reflexion pour savoir comment lancer le script chaque semaine
 
IDEE 1 : plannifier une ouverture du navigateur directement sur la page php
 Problème : personne n'est là pour fermer les fenêtres  
  et lorsque je fais un <body onload="setTimeout('window.close()',50000);">
  du fait qu'il ne s'agit pas de fenêtre ouverte par javascript :
  il y a une message de confirmation bloquant
 
IDEE 2 : utiliser php en ligne de commande (là gros problème)
 [que j'utiliserai dans un fichier .bat]
 Problème : dans le fichier php.ini j'ai activé iconv.dll (j'ai lu ça quelquepart)
 j'ouvre une invite de commande cmd.exe et pour tester :
 
 je me place dans le répertoire php du serveur puis :
 
 php.exe monscript.php  (anvoi mail mais sans accès BD)
 
 et ça marche ...
 
 par contre quand je le fais avec la version accès à la BD
 via l'inte de commande cmd.exe :
 
 Connexion impossible car tnsname.ora non accessible etc...
 
 or ce script via le navigateur fonctionne (puisque le tnsname.ora est bien configuré)
 
Donc je ne sais pas pour le moment mais je continue à chercher
 
Les docs que j'ai trouvé se rapportent surtout à Unix.
 
Dans ma version je n'ai pas de répertoire CLI ....
 
Faut il ajouter autre chose pour la BD?
Est ce que je m'y prends bien pour la ligne de commande ?
 
Donc voilà .... beaucoup de questions....
 
Merci d'avance !


Message édité par knemo le 29-06-2004 à 19:57:42
Reply

Marsh Posté le 29-06-2004 à 13:53:49   

Reply

Marsh Posté le 29-06-2004 à 14:09:30    

Ton serveur est public ? Je veux dire par là qu'il est possible d'y accéder par le net ?
 
Si oui www.webcron.org
 
Sinon, pour ton accès à la base, n'as tu pas moyen d'accéder à la base en ligne de commande (script SQL) et ensuite seulement de lancer le PHP d'envoi de mail.
 
Si tu comptes faire de la production avec easyphp, je te conseille plutot xampp qui est plus sécurisé


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 29-06-2004 à 14:19:21    

Alors en fait, c'est pour un intranet, donc d'après ce que j'ai lu sur le site : ben non....
Et puis c'est surtout qu'une soulution en interne (car ça risque
souvent de changer d'avoir de ajouts etc ...)
 
Donc voilà .....
 
Par contre pour l'accès à la BD en externe je ne vois pas comment :
 
parce qu'en fait j'ai une liste d'utilisateur...
 
pour chaque utilisateur je fais une requête et je stocke dans un fichier puis
j'envoie le mail ....
 
et pour éviter d'avoir trop de fichiers, je crée puis j'écrase le fichier
généré au fur et à mesure que je parcours la liste des utilisateurs ...
 
donc .... voilà...

Reply

Marsh Posté le 29-06-2004 à 14:30:50    

regarde cette adresse, je crois que tu as une solution pourt fermer tes fenêtres sans être là :
 
http://www.beyondlogic.org/solutio [...] ssutil.htm


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 29-06-2004 à 14:42:50    

MErci pour le lien !
 
mais c'est vrai que quand on y repense, si finalement on se retrouve  
avec des tas de fenêtres qui s'ouvrent et qui se referment, est ce que j'arriverai à tout planifier :
 
entre lancer des applications puis fermer d'autres, sachant que si on lance par le navigateur, il faufrait qu'on soit sûr que le navigateur ne soit pas fermé avant d'avoir fini le traimenet php
(parceque je sens qu'il va être long)
 
Donc désolé ... si je réfléchi pas avant de poser des questions...
 
Donc pour le moment le problème est bien ciblé sur la ligne de commande ...
 
 
 
 

Reply

Marsh Posté le 29-06-2004 à 14:45:15    

lancement des aplis à h, fermeture à h+1
1 heure cela devrait être suffisant non ? En plus pense soit à faire un fichier log pour vérifier la bonne exécution par la suite soit à envoyer un mail à l'admin qui lui donne le résultat du traitement


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 29-06-2004 à 16:14:20    

Finalement après des recherches et des recherches
(malgrès ton astuce sur le Beyond Magic, le problème
de la ligne de commande avec BD ne titillait)
 
j'ai trouvé un topic sur un forum, pour le moment j'ai pas  
bien compris le comment  
(réflexion à tête reposée à faire et regarder ce que fait les fonctions
utilisées)
 
c'est du bidouillage mais ça à l'air de fonctionner proprement :
(l'auteur le dit lui même : "it can be considerd cheating!" )
 
http://www.phpbuilder.com/annotate [...] id=1012940
 
en fait on passe par un fichier intermédiaire qui lit(fopen, puis  
fpassthru) le script avec accès BD
 
qui a accès à la BD)
 
Donc voilà ... je continue un peu à chercher ...
 
MAis là au moins il y a plusieurs voies de secours.
Merci àT509

Reply

Marsh Posté le 29-06-2004 à 17:10:57    

phpbuilder.com :


Date: 08/15/02 17:05
By: Matt L
Subject: RE: PHP and MySQL (and others) in command lin
 
AHA!
 
I've managed to do it, but in such a way that it can be considered cheating.
However, I haven't managed to get it to work in any other way.
 
Certain functions (like the mysql ones) seem to only work when accessed by the HTTP server (most likely due to the setup... Steve King has the right idea, allowing PHP to access MySQL directly)
 
So, what I did was use the php shell script to access a localhost web page that outputted the information I wanted using fpassthru.
 
Here's an example:
-- shell.php --
#!/usr/local/bin/php
<?php
$location = "http://localhost/tools/TimeSheet/notify.php";
$fp = fopen ($location, "r" );
fpassthru($fp);
?>
 
-- notify.php --
<?php
mysql_connect("localhost","root","" );
...
mysql_query(...)
...
//print out stuff that you want
?>
--  
 
It may be hacky, but it works : )
Good luck.  


 
Pour ceux à qui cela peut servir


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 03-08-2004 à 13:15:16    

J'ai utilisé wintask pour simuler les actions user.
+ son scheduler


---------------
ca papa
Reply

Marsh Posté le 04-08-2004 à 18:24:52    

drapal

Reply

Marsh Posté le 04-08-2004 à 18:24:52   

Reply

Marsh Posté le 06-08-2004 à 16:27:08    

vérifier si les variables d'environnement oracle snot bien définies ( tourve-t-il le ORACLE_HOME , ORACLE_SID etc) .

Reply

Marsh Posté le 06-08-2004 à 16:53:38    

y en a un qui a pas vu qu en ligne de commande il ne prend pas le php.ini par defaut.....
php -c C:\chemin\php.ini -f index.php
Comme ca il prend ton php.ini avec tout les modules ke tu charges sinon fais un php -i en ligne de commandes tu veras ke t as que certains modules de base qui sont activés.
Par contre fais gaffe l execution script est plus lente ke l execution a travers apache, sur php.net il preconise de mettre le max_execution time a 0 ce ki est normal d un coté vu que tu ne vas pas servir des clients...
 
http://ch2.php.net/manual/fr/features.commandline.php


---------------
Welcome to the Arkside !!!!!!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed