PHP:可以同时使用CURLOPT_FOLLOWLOCATION和open_basedir吗?
作者:互联网
我很困惑为什么这两个东西是互斥的,或者看起来是互斥的,并且想知道是否有办法在PHP-5.4上同时使用两者.尝试设置此选项时,出现以下错误:
curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is set
我正在使用需要设置CURLOPT_FOLLOWLOCATION的MailChimp API库.重定向可能发生,应该遵循,这就是Internet的工作方式.
我也在域上使用open_basedir.我想围栏该站点能够访问的目录.这只是安全问题,还有其他一些安全措施.
那么,有什么办法可以同时使用两者吗?我希望CURL遵循重定向,但也要保持PHP脚本对定义目录的本地文件访问.我见过的解决此问题的唯一方法是在重定向后模拟CURL的方法,但这似乎很笨拙,因此CURL已被设计用来实现此目的.
编辑:
如果不清楚,这是在我使用的程序包中引发错误的行:
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
IMO PHP过于保护,应该允许我这样做.因此,有没有一种方法-无需黑客/分叉这个软件包-告诉PHP,“看,我知道我在这里做什么”?
我已将其作为软件包开发人员的一个问题提出,但迄今为止尚未得到答复.如果该程序包支持传输层的注入,那么我可以通过使用PHP的curl函数的替代方法来解决它.
解决方法:
我将撤回这个问题,因为这似乎使人们感到困惑(编辑:对不起,听起来居高临下,这不是故意的;我没有正确解释问题,以及我和其他人对任何建议的解决方案所施加的限制).
答案似乎是,“不,你不能那样做”. PHP curl(curl_setopt)上的CURLOPT_FOLLOWLOCATION选项和php.ini中的open_basedir选项基本上是不兼容的,并且没有编程的方式可以使它们一起工作.
我将用代码中的手动重定向替代方法将第三方包替换为CURLOPT_FOLLOWLOCATION选项,在SO上有一些示例.我将继续推动程序包开发人员修复此错误.
感谢您抽出宝贵的时间来回复.
编辑:这里的真正问题是由于DECADE之前引发的错误,PHP强制使用了钝器解决方案:
https://bugs.php.net/bug.php?id=30609
问题出在curl库中-如果PHP禁止这样做,则不允许它进入本地文件系统(也许,对于open_basedir目录除外).由于curl和PHP在整整十年内还没有解决这个问题,因此现在该是停止使用curl的时候了-它不合适.海事组织.
标签:mailchimp,curl,open-basedir,php 来源: https://codeday.me/bug/20191030/1966698.html