You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用ftp_get获取FTP中PHP文件,如何获取执行结果而非源码

获取FTP服务器上PHP文件执行后的内容

嘿,我懂你的困扰——你现在用ftp_get拉取PHP文件,拿到的是源码而非执行后的输出,这其实是因为ftp_get的作用只是下载文件的原始内容,它根本不会触发PHP的解析执行流程。下面给你两种可行的解决方案:

方案一:通过HTTP请求(推荐,如果服务器支持Web访问)

如果你的FTP服务器同时运行着Web服务(也就是你能通过http://xxx/file.php访问这个文件),那直接请求它的HTTP地址是最省心的方式——Web服务器会自动执行PHP代码并返回输出结果。

使用file_get_contents:

// 替换成实际的HTTP访问地址
$webUrl = "http://your-server-domain/file.php";
$executedContent = file_get_contents($webUrl);

echo $executedContent; // 这里会输出"string"

注意:需要确保PHP配置里的allow_url_fopen是开启状态。

如果file_get_contents不行,用cURL:

$webUrl = "http://your-server-domain/file.php";
$ch = curl_init($webUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$executedContent = curl_exec($ch);
curl_close($ch);

echo $executedContent;

方案二:下载后本地执行(仅适用于可信文件)

如果只能通过FTP访问,那你需要先把文件下载到本地服务器,再执行它并捕获输出。但一定要注意安全:如果这个PHP文件来自不可信的来源,执行它可能会导致服务器被攻击。

// 1. 下载文件到临时目录
$tempFilePath = tempnam(sys_get_temp_dir(), 'ftp_php_');
$downloadSuccess = ftp_get($ftp_conn, $tempFilePath, "file.php", FTP_BINARY);

if ($downloadSuccess) {
    // 2. 捕获执行输出
    ob_start();
    include $tempFilePath; // 执行下载的PHP文件
    $executedContent = ob_get_contents();
    ob_end_clean();

    echo $executedContent; // 输出"string"

    // 3. 清理临时文件
    unlink($tempFilePath);
} else {
    echo "文件下载失败,请检查FTP连接或文件路径";
}

为什么你原来的代码不行?

你之前用php://output作为目标,ftp_get只是把文件的原始字节流写入这个输出流,PHP不会去解析其中的<?php ?>标签,所以缓冲区里得到的自然是源码,而不是执行后的结果。

内容的提问来源于stack exchange,提问作者ca hoang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:00:51