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
相关产品推荐
相关产品推荐

