これが動作する私のスクリプトです
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/London');
set_include_path('.' . PATH_SEPARATOR . '/opt/eposdatatransfer/application/../library' . PATH_SEPARATOR . get_include_path());
require('Zend/Date.php');
$use_pasv = true;$ftp_server = "172.16.0.65";
$ftp_user_name = "h3111142";
$ftp_user_pass = "seismic";
$ftp_remote_path = "/tmp";
$ftp_remote_file = array("/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.headers","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.headers.ext0","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.history","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.pds","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.pkey","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.traces","/files/nas1/epos4/eposbulk/h3111142/seismic/Line_58/0000000500900bc1.000000.00000005.traces.ext0",) ;
$ftp_local_file = array(59,59,59,59,59,59,59,) ;
$emailNotifications = array();
$GLOBALS['start']="";
$GLOBALS['current']="";
date_default_timezone_set ( "Europe/London" );
$conn_id = ftp_connect($ftp_server);
if (!$conn_id){
echo "Unable to connect to $ftp_server";
updateStatus($ftp_local_file[$count], 0);
exit(1);
}
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (!$login_result){
echo "Inavalid login/password for $ftp_user_name on $ftp_server";
updateStatus($ftp_local_file[$count], 0);
ftp_close($conn_id);
exit(2);
}
ftp_pasv($conn_id, $use_pasv);
if (!ftp_chdir($conn_id, $ftp_remote_path)){
echo "Invalid remote path $ftp_remote_path";
ftp_close($conn_id);
updateStatus($ftp_local_file[$count], 0);
exit(3);
}
$count = 0;
foreach($ftp_remote_file as $key => $value){
updateStatus($ftp_local_file[$count], 2);
if(!empty($value)){
if (ftp_put($conn_id, $value, $value, FTP_BINARY)){
updateStatus($ftp_local_file[$count], 1);
}else{
$use_pasv = false;
ftp_pasv($conn_id, $use_pasv);
if (ftp_put($conn_id, $value, $value, FTP_BINARY)){
updateStatus($ftp_local_file[$count], 1);
}else{
updateStatus($ftp_local_file[$count], 0);
ftp_close($conn_id);
echo "Error while uploading $value";
exit(4);
}
}
}
$count++;
}
ftp_close($conn_id);
$GLOBALS['current'] = null;
sendmail($emailNotifications,$ftp_remote_file, $ftp_local_file);
function updateStatus($id, $status){
$con = mysql_connect('hero','eposdata','support');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('eposdatatransfer', $con);
//$mysqldate = date( 'Y-m-d H:i:s');
$mysqldate = new Zend_Date();
if($status == 2){
if($GLOBALS['current']==$id){
return;
}else{
$GLOBALS["current"] = $id;
}
$GLOBALS['start'] = $mysqldate;
$mysqldate = new Zend_Date($mysqldate, Zend_Date::ISO_8601);
$start = $mysqldate->toString('Y-MM-dd HH:mm:ss');
//echo $start;
mysql_query("UPDATE queue SET status=$status, started='$start' WHERE id=$id");
}elseif($status == 1){
$dateDiff = ($mysqldate->getTimestamp() - $GLOBALS['start']->getTimestamp()) ;
$complete = $mysqldate->toString('Y-MM-dd HH:mm:ss');
mysql_query("UPDATE queue SET status=$status, completed='$complete', duration='$dateDiff' WHERE id=$id");
}else{
mysql_query("UPDATE queue SET status=$status WHERE id=$id");
}
mysql_close($con);
}
function sendmail($emailNotifications, $ftp_remote_file, $idArr){
$message = "";
$count = 0;
$data = array();
foreach($ftp_remote_file as $key => $value){
if($GLOBALS['current']==$idArr[$count]){
//return;
}else{
$GLOBALS['current'] = $idArr[$count];
$data = getLineName($idArr[$count]);
$message = $message . $data['data_name'] . "
";
}
$count++;
}
$message = $message . "
Downloaded to Woking" ;
$message = $message . "
This is an automated message. DO NOT REPLY";
// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message = wordwrap($message, 70);
//Send
foreach($emailNotifications as $key => $value){
mail("$value", 'Transfer Complete Line: ' . $data['line_name'], $message);
}
}
function getLineName($id){
$con = mysql_connect('hero','eposdata','support');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('eposdatatransfer', $con);
$result = mysql_query("select * from queue WHERE id=$id");
$row = mysql_fetch_assoc($result);
return $row;
}