从命令行连接到 SFTP 不起作用

connecting to SFTP is not working form the command line

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

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

这是我得到的错误

C:\Users\test>php -f C:\phpsites\dp_in\IN_sales.php PHP Warning: require(../classes/connection.php): failed to open stream: No such file or directory in C:\phpsites\dp_in\IN_sales.php on line 17

Warning: require(../classes/connection.php): failed to open stream: No such file or directory in C:\phpsites\dp_in\IN_sales.php on line 17 PHP Fatal error: require(): Failed opening required '../classes/connection.php' (include_path='.;C:\php\pear') in C:\phpsites\dp_in\IN_sales.php on li ne 17

Fatal error: require(): Failed opening required '../classes/connection.php' (inc lude_path='.;C:\php\pear') in C:\phpsites\dp_in\IN_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';

多个问题...

1) 您需要定义包含路径,以便 require 有效

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

在您的 require 中使用 __DIR__ 以正确请求您的文件:

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

我想通了!!

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

chdir(dirname(__FILE__));

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