从命令行

时间:2015-08-04 21:20:49

标签: php command-line sftp

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

但是当我从命令行运行此命令时,我会收到很多错误

这是我得到的错误

  

C:\ Users \ test> php -f C:\ phpsites \ dp_in \ IN_sales.php       PHP警告:require(../ classes / connection.php):无法打开流:没有这样的        第17行的C:\ phpsites \ dp_in \ IN_sales.php中的文件或目录

     

警告:require(../ classes / connection.php):无法打开流:没有这样的文件        或第17行的C:\ phpsites \ dp_in \ IN_sales.php中的目录       PHP致命错误:require():无法打开所需的' ../ classes / connection.php'        li中的c:\ phpsites \ dp_in \ IN_sales.php中的(include_path ='。; C:\ php \ pear')       ne 17

     

致命错误:require():无法打开所需的' ../ classes / connection.php' (INC       第17行的C:\ phpsites \ dp_in \ IN_sales.php中的lude_path ='。; C:\ php \ pear')

这是我使用SFTP连接服务器的方法。     

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

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

我不确定导致此问题的原因

EDITED

这是编辑后的整个代码

<?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';

3 个答案:

答案 0 :(得分:2)

__DIR__中使用require,以便正确使用您的文件:

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

答案 1 :(得分:0)

多个问题......

1)您需要定义包含路径,以便require正常工作

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

答案 2 :(得分:0)

我明白了!!

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

chdir(dirname(__FILE__));

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