克朗塔布赢得';t使用PHP从FTP服务器下载文件

克朗塔布赢得';t使用PHP从FTP服务器下载文件,php,ftp,crontab,Php,Ftp,Crontab,我有一个PHP脚本,我已经写了登录到FTP服务器,下载一个抑制数据的csv文件,并将其与我们当前的抑制列表文件合并 当我从命令行运行它时,它工作得非常好。当我在crontab中设置它每天运行一次时,它总是说它无法从FTP服务器下载文件,然后退出。我给脚本将文件写入的目录指定了一个777,所以我无法想象这会是一个权限问题 还有其他人有这个问题吗?有什么简单的东西我遗漏了吗?下面是我的crontab行和脚本代码,如果这有助于给出答案的话。谢谢大家! Crontab条目: 08***php/var/w

我有一个PHP脚本,我已经写了登录到FTP服务器,下载一个抑制数据的csv文件,并将其与我们当前的抑制列表文件合并

当我从命令行运行它时,它工作得非常好。当我在crontab中设置它每天运行一次时,它总是说它无法从FTP服务器下载文件,然后退出。我给脚本将文件写入的目录指定了一个777,所以我无法想象这会是一个权限问题

还有其他人有这个问题吗?有什么简单的东西我遗漏了吗?下面是我的crontab行和脚本代码,如果这有助于给出答案的话。谢谢大家!

Crontab条目:

08***php/var/www/scripts/ftp-unsubs.php>/var/www/scripts/logs/ftp unsubs.log

PHP脚本:

<?
// get latest suppression file and append to our global suppression file (loader.txt)

$yesterday = date("Y-m-d", strtotime("yesterday"));
$ftp_server = '--hidden--';
$ftp_user_name = '--hidden--';
$ftp_user_pass = '--hidden--';
$local_file = 'unsub_dls/unsubs.' . $yesterday . '.csv';
$remote_file = 'FJM378_unsubs.' . $yesterday . '.csv';


// set up basic connection
$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

ftp_pasv($conn_id, TRUE);

print "\n[" . date("r") . "]\n";

if ((!$conn_id) || (!$login_result)) {
    echo "FTP connection has failed!\n";
    echo "Attempted to connect to $ftp_server for user $ftp_user_name\n";
    exit;
} else {
    echo "Connected to $ftp_server, for user $ftp_user_name\n";
}

// try to download $remote_file and save to $local_file

if (ftp_get($conn_id, $local_file, $remote_file, FTP_BINARY)) {
  echo "Successfully written to $local_file\n";
} else {
  echo "Couldn't get file $remote_file\n";
}

// close the FTP stream
if (ftp_close($conn_id)) {
  print "Closed the connection to $ftp_server\n";
}


// grab new unsubs and add timestamp
print "\nProcessing file $local_file\n";

if (file_exists($local_file)) {

  $fh = fopen($local_file, 'r');

  $i = 0;
  $unsub = "";
  while (!feof($fh)) {
    $line = fgets($fh);
    $line = preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "", $line);
    if ($line != "" && $line != "email") {
      $unsub .= $line . "," . date("Y-m-d H:i:s") . "\n";
      $i++;
    }
  }

  fclose($fh);

  // add unsubs to global unsub file
  $fsupp = fopen('loader.txt','a');
  fwrite($fsupp, $unsub);
  fclose($fsupp);

  print "Added $i unsubs to loader.txt\n\n";

} else {
  print "Error: file '$local_file' doesn't exist! Bailing.\n\n";
}
?>

尝试向您的crontab条目添加一个用户名,此任务应在其凭据下运行,如下所示:


0 8***rootphp/var/www/scripts/ftp-unsubs.php>/var/www/scripts/logs/ftp unsubs.log

更改
0 8***/php
0 8***/bin/php
或来自
哪个php
的任何内容。感谢您的建议。我试过了(它是/usr/bin/php),它给了我同样的问题。。。表示“无法获取文件”并退出。因此脚本正在执行,但无法连接。更改
$local\u file='unsub\u dls/unsubs'$昨天。csv'到完整路径?哈!你开玩笑吧,就这么简单。那很有效!非常感谢你。很高兴读到这个!Crontab总是倾向于所有内容的完整路径,因为执行时不会加载任何环境。干杯