命令行无法连接SFTP



我正在尝试从SFTP读取文件。当我通过浏览器运行URL时,我能够连接到服务器读取信息。

但是当我从命令行运行这个命令时,我得到了许多错误

这是我得到的错误

C:Userstest>php -f C:phpsitesdp_inIN_sales.phpPHP警告:require(../classes/connection.php): failed to open stream: No such文件或目录在C:phpsitesdp_in in_sale .php第17行

警告:require(../classes/connection.php): failed to open stream: No such file或目录C:phpsitesdp_inIN_sales.php第17行PHP致命错误:require():打开所需的" ../classes/connection.php "失败(include_path='.;C:phppear') in C:phpsitesdp_inIN_sales.php on li东北17

致命错误:require(): Failed open required './classes/connection.php' (inc .lude_path='.;C:phppear') in C:phpsitesdp_inIN_sales.php on line 17

这就是我使用SFTP连接到服务器的方式。

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

另一个奇怪的事情是,另一个文件使用类似的代码工作没有问题!

我不确定是什么导致了这个问题

下面是我编辑

后的全部代码
<?php
    ini_set('max_execution_time', 900);
    ini_set('user_ini.cache_ttl', 900);
    date_default_timezone_set('America/Los_Angeles');
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    $today = strtotime( "-25 day" );

    $remote_file = '/per/Data_'. date('Ymd', $today ) . '.csv'; 
    //set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
    include(__DIR__ . '/Net/SFTP.php');
    //include "phpseclib.php";
    $sftp = new Net_SFTP('IPADDRESS');
    if (!$sftp->login('username', 'password')) {
        exit('Login Failed');
    }
    if(empty($sftp->size($remote_file))){
        exit('File Not Found - ' . $remote_file);
    }
    $csv = $sftp->get($remote_file);
    $handle = fopen('php://temp', 'r+');
    fputs($handle, $csv);
    rewind($handle);
    $data = array();
    while ($csv_row = fgetcsv($handle) ) {
        $data[] = $csv_row; 
    }
    fclose($handle);

require realpath(__DIR__ . '/..') . '/classes/connection.php';

在您的require中使用__DIR__,以便正确地要求您的文件:

require(__DIR__ . "../classes/connection.php")

多重问题…

1)你需要定义你的包含路径,使require工作

2)您的连接可能失败,因为#1(缺少包含文件的凭据)

我明白了!

我将这段代码添加到顶部的文件

chdir(dirname(__FILE__));

将工作目录更改为运行文件路径

最新更新