我有一个 php 脚本,它应该从一个 Web 服务器获取文件并将其上传到另一个 Web 服务器,当我通过浏览器运行该脚本时,它运行正常。但当我使用这个 cronjob 时,它却无法上传。
51 14 * * * /usr/bin/php /kunden/homepages/25/d515048961/htdocs/FTP_Orders.php
我是不是漏掉了什么?时间是任意的,我只是在测试一下。
PHP 脚本为:
<?php
// FTP access parameters
$host = 'paperlinx.co.uk';
$usr = '[email protected]';
$pwd = '######';
// file to move:
$local_file = './db_export_orders_2014-10-27.csv';
$ftp_path = '/exported/db_exported_orders_2014-10-27.csv';
// connect to FTP server (port 21)
$conn_id = ftp_connect($host, 21) or die ("Cannot connect to host");
// send access parameters
ftp_login($conn_id, $usr, $pwd) or die("Cannot login");
// turn on passive mode transfers (some servers need this)
ftp_pasv ($conn_id, true);
// perform file upload
$upload = ftp_put($conn_id, $ftp_path, $local_file, FTP_ASCII);
// check upload status:
print (!$upload) ? 'Cannot upload' : 'Upload complete';
print "\n";
/*
** Chmod the file (just as example)
*/
// If you are using PHP4 then you need to use this code:
// (because the "ftp_chmod" command is just available in PHP5+)
if (!function_exists('ftp_chmod')) {
//print "in not function exists";
function ftp_chmod($ftp_stream, $mode, $filename){
return ftp_site($ftp_stream, sprintf('CHMOD %o %s', $mode, $filename)) or die ("i'm stuck here");
}
}
/* else
// try to chmod the new file to 666 (writeable)
if (ftp_chmod($conn_id, 0666, $ftp_path) !== false)
{
print $ftp_path . "chmoded successfully to 666\n";
}
else
{
print "could not chmod $file\n";
}
*/
// close the FTP stream
ftp_close($conn_id);
?>
我真的被这个问题困扰了,所以任何帮助我都会非常感激。
答案1
问题是,当您从 cron 作业运行脚本时,当前工作目录与从浏览器运行脚本时的目录不同,因此应避免使用相对路径。
用完整路径替换你的$local_file
,它应该可以工作。