【发布时间】:2019-01-06 01:37:06
【问题描述】:
我想使用 PHP 读取远程文本文件(最好使用 fopen)。当我在本地文件上使用此函数时,我的脚本使用 fopen 工作。
我试过了:
$file = fopen ("http://abc.abc.abc", "r");
if (!$file) {
echo "<p>Unable to open remote file.\n";
exit;
}
我得到了:
警告:fopen(http://abc.abc.abc):打开流失败:由于目标机器主动拒绝,无法建立连接。在第 2 行的 C:\xampp\htdocs\NMR\nmrTest5.php 中无法打开远程文件。
我读到phpseclib 可能是一个不错的选择,因为我可以使用 WinSCP (SFTP) 或使用 Puttyfor 访问我的文件,所以我尝试了这个(在将所有文件从 phpseclib 复制到我的目录之后)希望我可以在本地复制文件,然后用 fopen 读取它(这不是遇到的最好的事情,但我可以忍受):
include('Net/SFTP.php');
$sftp = new Net_SFTP('abc.abc.abc');
if (!$sftp->login('username', 'pass')) {
exit('Login Failed');
}
我得到了:
注意:在第 1561 行的 C:\xampp\htdocs\NMR\Net\SSH2.php 中找不到兼容的服务器到客户端加密算法 登录失败
有趣的是,如果我连接到服务器(使用 WinSCP),我会收到不同的消息:
注意:从第 3362 行 C:\xampp\htdocs\NMR\Net\SSH2.php 中的套接字读取错误
注意:第 1471 行 C:\xampp\htdocs\NMR\Net\SSH2.php 中的服务器关闭了连接 登录失败
知道如何让它工作吗?理想情况下,我会使用 fopen,但我愿意接受其他解决方案。
【问题讨论】:
-
要将
fopen或file或file_get_contents用于URL,您需要在php.ini中启用allow_url_fopen或使用ini_set。否则,正如给出的答案所说,使用 cURL 来获取 URL 的内容 -
您是否尝试了解错误消息?
fopen()生成的那条很清楚:“无法连接,因为目标机器主动拒绝”。您的代码没有问题,远程计算机不接受连接。你能在浏览器中打开网址(http://abc.abc.abc)吗?如果可以,那么fopen()也应该可以打开它。如果不能,则可能是 URL 不正确,无论您如何尝试都无法打开。 -
@axiac:是的,我试图理解我的错误信息。我认为你是对的,我只是无法在浏览器中打开 URL。我发布了我所做的,尽可能多地提供信息,并表明我自己尝试了一些东西。这也是我尝试使用 phpseclib 的原因,因为我知道我可以使用 SFTP 协议(使用 WinSCP)访问文件。我仍在调查 Tanvir Ahmed 给出的答案,但如果我需要使用 SFTP,我不确定它是否会起作用。
-
对于 phpseclib,您可能没有设置 include_path。你可以这样做:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); -
@neubert:感谢您的评论。我已经设置了 include_path,现在当我运行我的脚本时,我什么也没有告诉我它有效。 (我还在我的代码中添加了
Else echo "it works!";,我得到:它有效)。现在我需要处理我的文件......我认为我正在朝着正确的方向前进。谢谢。