如果有人不想阅读整个解释,您可以跳到我有实际问题的最后两段
所以我有一堆用CakePHP制作的网站。在其中一个页面中(这对所有网站都是一样的),我加载一个XML文件并处理其内容(使用XML帮助程序)。这已经有一段时间了。现在,突然之间,它在任何网站中都不再起作用(并且代码没有改变一点),它给出了“错误打开文件”。
与此同时,这些网站的另一个脚本(与前一个网站无关,它是普通的PHP,在cakephp“区域”之外)也停止了工作。在这种情况下,它是一个脚本,它与视频托管提供商(Fliqz)建立连接,并检索给定视频ID的视频的URL。突然,它抛出了一个错误,例如“未创建会话”(该脚本与Fliqz'服务器创建某种会话以获取URL)。
这一切听起来很奇怪,我知道。在检查代码是否正确后,我做的第一件事是调用1& 1(托管服务提供商)并询问他们是否在服务器上做了任何更改。他们说他们几个月前改为PHP5(我知道这一点,并且在改变之后一切都工作正常),但他们没有改变其他任何东西。
我的问题是,我能做些什么来找出导致这些问题的原因吗?例如,我发现有人说他的托管限制了一些允许外部连接的功能。或者在另一篇文章中,我看到了关于这样做的建议: echo file_get_contents(“http://google.com/”),我收到了错误消息,这意味着某些设置不正确。我甚至尝试在加载XML文件的页面中使用 simplexml_load_file (而不是XMl帮助程序),但是没有用,给出了另一个错误......
我想知道,如果一个PHP设置导致了这个问题,那么我可以查看它并再次调用1& 1告诉他们需要更改的内容(如果有什么要改变) 。否则,世界上有什么东西可以停止工作?
感谢您的任何建议!非常感谢!
编辑:错误的详细说明
1。与使用CakePHP的XML帮助程序加载XML无关的错误
这是我使用的代码(以前用得很完美):
$completeurl = '/full/path/to/file/myfile.xml';
App::import('Xml');
$xml =& new XML($completeurl);
$this->list = Set::reverse($xml);
我没有收到任何错误或警告。如果我调试 $ xml ,我会得到这个:
Xml Object
(
[__parser] =>
[__file] =>
[__rawData] =>
[__header] =>
[__tags] => Array
(
)
[version] => 1.0
[encoding] => UTF-8
[name] => #document
[namespace] =>
[namespaces] => Array
(
)
[value] =>
[attributes] => Array
(
)
[children] => Array
(
)
[__parent] =>
)
如果我调试 $ this-> list ,我会得到一个空数组。在此问题出现之前,我会得到一个关联数组,其中包含XML文件的所有信息,结构完美。哦,XML文件和以前一样,我已经重新验证了它,以防万一没有错误。
2。与使用simplexml_load_file()
加载的XML文件相关的错误这是我用“常规”php尝试的代码(不使用任何CakePHP助手):
$file = '/full/path/to/file/myfile.xml';
if(!$xml = simplexml_load_file($file))
exit('Failed to open '.$file);
这是错误(警告):
Warning (2): simplexml_load_file() [function.simplexml-load-file]: URL file-access is disabled in the server configuration [APP/plugins/icd_discovery/webroot/videos.php, line 29]
Warning (2): simplexml_load_file(http://discovery.ingles100.com/icd_discovery/xml/videos_unidades.xml) [function.simplexml-load-file]: failed to open stream: no suitable wrapper could be found [APP/plugins/icd_discovery/webroot/videos.php, line 29]
Warning (2): simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "http://discovery.ingles100.com/icd_discovery/xml/videos_unidades.xml" [APP/plugins/icd_discovery/webroot/videos.php, line 29]
如果我为文件设置了相对路径,我只会收到最后一个警告,但仍然没有加载它。
** 3.与在Fliqz **中加载托管视频的URL的脚本相关的错误
包含此脚本的页面与之前的脚本完全无关(意味着那里的代码不会影响此处的代码)。我们使用以下脚本(由Fliqz提供)来请求我们在那里托管的视频的网址:
include_once '../fliqz/dlMetrics.php';
// initializing new session
$videoID = '123123123';
$applicationID = '456456456';
$uniqueID = null;
// create a new fliqzDownload Object
$metricsObj = new dlMetrics();
// get new session, using Application ID from Account:
$sessionID = $metricsObj->newSession($applicationID,NULL,NULL,NULL,$uniqueID);
// show server time when new session was created:
$start = $metricsObj->getSessionStart();
// Get asset location (note: must use dashes in asset ID example: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
$video_URL = $metricsObj->initLoad($videoID);
通过这样做,我们会在 $ video_URL 变量中获取视频的网址。再次,这曾经完美地工作。突然间,它没有。
所有这些事情都停止了工作,这是巧合吗?我认为某些地方发生了变化。不是代码,我是唯一触及它的人。 PHP版本前一段时间发生了变化,一切正常。服务器中的东西? 1& 1表示他们没有,或者至少是我与之交谈过的人。如果我必须回电话,我希望能够更好地指出问题可能来自哪里,这就是为什么我需要你帮助的人!
再次感谢任何建议!
答案 0 :(得分:1)
使用以下内容创建名为php.ini
的文件:
allow_url_fopen = ON
并将其放在与这些脚本相同的文件夹(或文件夹)中。