2012-02-29 71 views
1

我的问题是我无法在远程服务器上包含文件。无法在远程服务器上包含文件

<?php 
    echo "Including\n"; 
    require_once("http://xx.xxx.xxx.xx:8080/path/to/myfile.inc"); 
    echo "Done..\n"; 
?> 

脚本在require_once函数失败。 我运行的脚本:PHP -d allow_url_include =开的script.php 但为了确保我已经在php.ini

设置allow_url_include并于allow_url_fopen到,如果我复制到http://xx.xxx.xxx.xx:8080/path/to/myfile.inc我所服务的浏览器文件。 我也试图包括其他远程文件(在标准端口80),但仍然没有运气

我真的很困惑的地方是,一切工作从我的本地计算机在我的办公室(mac,ubuntu),但不是我们的服务器我已经在2个不同的服务器上进行了测试,虚拟和专用。 我可以用fopen()获取文件。

+3

您通常会**不想**包含远程文件。如果他们输出任何PHP代码,它将在您的系统上执行! – ThiefMaster 2012-02-29 12:08:48

+0

加上它真的很慢。 – 2012-02-29 12:09:53

+0

我了解安全方面。我可以完全控制两台服务器,并可以限制文件访问服务器。在实践中,所有的服务器都在同一个网络上,所以我希望它不会太慢,但我要测试一下。只是好奇它为什么它在一些机器上运行而不是其他机器? – user918712 2012-02-29 12:35:26

回答

0

Require_Once只能用于本地文件。如果你想获得一个远程文件,使用file_get_contents。请记住,如果您尝试从远程服务器那样包含PHP,它将会非常不安全,或者PHP将在远程服务器上执行。

+0

从文档说,我应该能够使用require_once:[http://php.net/manual/en/features.remote-files.php](http://php.net/manual/en/features。 remote-files.php),它也可以在我的本地计算机上运行 – user918712 2012-02-29 12:41:02

+0

如果您阅读文档,它会说:另外,可以使用URL ...自PHP 5.2.0起,必须为这些allow_url_include启用。 – MichaelH 2012-02-29 12:45:42

2

这可以通过在php.ini上设置allow_url_includeon来完成。

但是,正如评论所说,这将打开应用程序的开发

巨大

安全漏洞。

+0

但是,如果您绝对必须包含来自远程服务器的内容,请考虑添加额外的身份验证和缓存! – symcbean 2012-02-29 13:07:31

+0

@symcbean谢谢。我知道这是不安全的,我可以避开包括远程服务器上的文件,但问题是为什么它在某些机器上无法使用。 Starx:正如我在帖子中写的 - 我确实设置了allow_url_include到On – user918712 2012-02-29 13:19:57

+0

我想你可以使用像stunnel(https://www.stunnel.org/index.html)这样的东西来确保服务器之间的通信。 – ven 2013-04-18 00:08:21