我正在尝试从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';
答案 0 :(得分:2)
在__DIR__
中使用require
,以便正确使用您的文件:
require(__DIR__ . "../classes/connection.php")
答案 1 :(得分:0)
多个问题......
1)您需要定义包含路径,以便require
正常工作
2)您的连接可能因为#1(从包含文件中丢失凭据)而失败
答案 2 :(得分:0)
我明白了!!
我将此代码添加到我的文件的顶部
chdir(dirname(__FILE__));
这会将工作目录更改为正在运行的文件路径。