我正在创建一个Web应用程序,我希望向公众发布以便在任何人自己的Web服务器上下载和安装,但是我被告知,由于“安全性”,一些webhosts禁止在php中使用fopen
问题“,特别是在共享主机上。我在应用程序的安装过程中使用fopen
,我应该关注这个吗?这是共享主机中的常见做法吗?如果是这样,我可以用另一种方式写入文件吗?我听说过cURL,但这需要最终用户更高级的知识,不是吗?如果是这样,显然不会出现这种情况。非常感谢!
答案 0 :(得分:3)
永远不会禁用fopen()。然而,php.ini设置“allow_url_fopen”是。因此,如果您只访问本地文件,而不是通过fopen()访问http:// URL,这不是一个真正的问题。
如果您需要URL支持,则应该包括HTTP请求类,例如the one in PEAR。这样就可以避免对cURL扩展模块的用户不友好的依赖。
答案 1 :(得分:2)
在我有限的经验中,fopen()
很少被禁用。使用curl写入本地文件是无稽之谈,因此这不是替代方案。由于所有写入本地文件都取决于fopen,普通包的最常用路由是:
答案 2 :(得分:1)
使用cURL:
function GET($url,$header = null,$post = 0,$cookie = null){
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_HEADER, $header);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
if($post) {
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_CUSTOMREQUEST,($post)?"POST":"GET");
curl_setopt($handle, CURLOPT_POSTFIELDS, $post);
}
curl_setopt($handle, CURLOPT_COOKIE, $cookie);
if(preg_match('/https/',$url)) {
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
}
return($buffer = @curl_exec($handle)) ? $buffer : 0;
}
//A basic example of the requisition process :
echo GET('http://google.com',1)
//post data:
GET('/test.php',1,
array('Name' => 'Jet',
'id' => 12,
'foo' => 'abc'));
returns:
successfully : source-code;
0 : Request failed
//send cookies :
GET('http://example.com/send.php',1,
array('Name' => 'Jet',
'id' => 12,
'foo' => 'abc'),"cookies");
file_put_contents: http://php.net/file_put_contents