从命令行连接到 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__));
这会将工作目录更改为 运行 文件路径。
我正在尝试从 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__));
这会将工作目录更改为 运行 文件路径。