如果有人不想阅读整个解释,你可以跳到我有实际问题的最后两段
所以我有一堆用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提供)来请求我们在那里托管的视频的URL:
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变量中获得视频的URL。同样,这曾经非常有效。突然间,它没有了。
那么,所有这些东西停止工作是巧合吗?我认为某些地方发生了变化。不是密码,我是唯一一个接触它的人。PHP版本不久前发生了更改,一切都很正常。服务器里有什么东西?1&1说他们没有,或者至少是我交谈过的人没有。如果我必须回电话,我希望能够更好地指出我认为问题可能来自哪里,这就是为什么我需要你们的帮助!
再次感谢您的建议!
创建一个名为php.ini
的文件,其中包含以下内容:
allow_url_fopen = ON
并将其放置在与这些脚本相同的文件夹中。