herka57 membrus simplex | Bonjour,
Je suis en train d'essayer de récupérer des infos envoyées par un serveur FTP (une sorte de ticket suite à la dépose d'un fichier), mais je me casse un peu les dents
Voilà le déroulement d'une session type :
C:\Program Files\EasyPHP-5.3.2i\www>ftp *****
Connected to *****.
220-FTPD1 IBM FTP CS V1R8 at *****, 06:40:47 on 2010-06-15.
220 Connection will close if idle for more than 5 minutes.
User (*****:(none)): UTJ1H
331 Send password please.
Password:
230 UTJ1H is logged on. Working directory is "UTJ1H.".
ftp> QUOTE SITE FILETYPE=JES
200 SITE command was accepted
ftp> PUT ./COMPARE
200 Port request OK.
125 Sending Job to JES internal reader FIXrecfm 80
250-It is known to JES as JOB10147
250 Transfer completed successfully.
ftp: 850 bytes sent in 0,00Seconds 850000,00Kbytes/sec.
ftp> ls
200 Port request OK.
125 Nlst started OK
JOB10147
250 Nlst completed successfully
ftp: 10 bytes received in 0,00Seconds 10000,00Kbytes/sec.
ftp> dir
200 Port request OK.
125 List started OK
UTJ1HA JOB10147 OUTPUT 4 Spool Files
250 List completed successfully.
ftp: 74 bytes received in 0,01Seconds 4,93Kbytes/sec.
ftp> put RMFDC2
200 Port request OK.
125 Sending Job to JES internal reader FIXrecfm 80
250-It is known to JES as JOB10148
250 Transfer completed successfully.
ftp: 10525 bytes sent in 0,00Seconds 10525000,00Kbytes/sec.
ftp> dir
200 Port request OK.
125 List started OK
UTJ1HA JOB10147 OUTPUT 4 Spool Files
UTJ1HA JOB10148 ACTIVE
250 List completed successfully.
ftp: 148 bytes received in 0,33Seconds 0,45Kbytes/sec.
ftp> |
C'est sur un mainframe, l'idée est d'envoyer un job à JES/2 en passant par FTP, attendre que
celui-ci aie fini de s'exécuter, et récupérer les spools d'exécution.
Donc, 1) je me signe
2) j'indique au serveur FTP que je m'adresse à JES
3) je balance le job, JES me répond avec un n° de job
4) j'attends que le job soit fini dans le premier cas, il se finit vite, la commande DIR renvoie la liste avec soit ACTIVE soit OUTPUT, indiquant
si le job est fini ou encore en train de s'exécuter.
5) je récupère les spools (un bête GET)
Mais voilà, si j'utilise les fonctions "standard" php comme ftp_put, je ne récupère pas le n° de job
Si je fais un petit algo pour balancer le fichier sur le port DATA (c'est du passif), le job ne s'exécute pas, ce qui
m'indique que je merde quelque part.
Voilà l'un des essais que j'ai fait :
Code :
- <?php
- echo "Please wait while connecting to ****<BR>";
- $server = "****";
- // Connect to FTP server
- $conn = ftp_connect($server);
- if (!$conn) die("Unable to connect to $server" );
- // Login as "user" with password "pass"
- if (!ftp_login($conn, 'UTJ1H', '********')) die('Error logging into ****');
- echo "Connected, sending JCL <BR>";
- // Issue: "SITE FILETYPE=JES" command to ftp server
- if (!ftp_site($conn, 'FILEtype=JES')) die('Command failed.');
- // Issue PASV command to get IP and port of DATA socket to use
- $result = ftp_raw($conn, 'PASV');
- // Compute data and port from PASV command result
- $temp = explode("(",$result[0]);
- $temp2 = explode(" )",$temp[1]);
- $temp3 = explode(",",$temp2[0]);
- $data_host = $temp3[0] . '.' . $temp3[1] . '.' . $temp3[2] . '.' . $temp3[3];
- $data_port = ( $temp3[4] * 256 ) + $temp3[5];
- // Open data connection
- $data_channel = fsockopen($data_host,$data_port);
- if (!$data_channel) die("Unable to establish data connection to $server <BR>" );
- // Open the JCL file to send it through data channel
- $jcl_file = fopen("./COMPARE","r" );
- $contents = '';
- while (!feof($jcl_file))
- {
- fwrite($data_channel,fread($jcl_file,4096)) ;
- }
- fclose($jcl_file);
- fclose($data_channel);
- print_r($result);
- // List files using FTP command socket
- $contents = ftp_rawlist($conn, "." );
- print_r($contents);
- ?>
|
Quelqu'un peut m'aider à pointer là où je merde ?
merci,
Romu
|