无法打开流:找不到合适的包装器

时间:2013-10-22 19:58:17

标签: php

你好我正在将php文件从一个网站实现到另一个网站,这是我在尝试使用已实现的php文件打开以下页面时收到的以下错误消息:

http://www.holidaysavers.ca/europe-destinations-canada.php

基本上我从一个网站导入到另一个网站的php文件是相同的,但是它们在原始网站上工作但是当我将它们实现到新网站时它不再起作用。

你可以帮助我解决这个问题吗?

谢谢

5 个答案:

答案 0 :(得分:19)

您不能将外部网站/服务器上的PHP脚本包含在本地脚本中 - 除非您在allow_url_include上启用php.ini(如果您有权访问它)

相反,您可以让该网站/服务器呈现页面并在您的本地脚本上获得生成的html输出。

在脚本中替换此行:

include('http://www.holidaysavers.ca/europe-canada.php?detour');

有了这个:

echo file_get_contents('http://www.holidaysavers.ca/europe-canada.php?detour');

答案 1 :(得分:2)

您可以发布“europe-destinations-canada.php”中的代码吗?看起来脚本要求在这个新站点/服务器上执行未在php设置中配置的内容

答案 2 :(得分:0)

我真的不知道您使用的是哪种主机,或者如果您使用的是Xampp,对于Xampp以及其他Web服务器软件,我的确很简单。转到您的php.ini文件,您可以在c:\\xampp\php\php.ini中搜索该文件,或者仅在php.ini中查找它,allow_url_include应该位于服务器软件文件夹中的php文件夹中。现在,在php.ini文件中搜索last_name,然后将Off(关闭)替换为On(如果尚未启用)。这很可能是修复程序,因为它对我有用。

如果我知道您使用的是主机服务器还是家庭服务器,我也许可以提供进一步的帮助。如果您使用的是托管网站,则请分享您使用的托管服务类型,以便我进一步检查。

答案 3 :(得分:0)

以随机远程 php 文件为例。

目标是在本地使用这个远程文件,确保它没有改变或被改变。远程文件只会下载一次。

硬编码 sha256 签名避免在启动时使用网络。这只是一个基础,可以根据您的需要转向许多场景,例如检查更新。

<?php
$lib_url = "https://raw.githubusercontent.com/getopt-php/getopt-php/master/src/CommandInterface.php";
$lib_filename = basename($lib_url);
// SHA256 signature
$lib_signature = hash_file("sha256",$lib_url); // "dba0b3fe70b52adbb8376be6a256d2cc371b2fe49ef35f0c6e15cd6d60c319dd"
// Hardcode the signature to avoid a network call on startup:
//$lib_signature = "dba0b3fe70b52adbb8376be6a256d2cc371b2fe49ef35f0c6e15cd6d60c319dd";

if (!is_file($lib_filename) || $lib_signature != hash_file("sha256",$lib_filename)){
  // No local copy found, or file signature invalid, get a copy
  copy($lib_url, $lib_filename);
}
require $lib_filename;

如果您打算将程序作为单个文件共享,而无需 Composer,这将非常有用。

对于托管在 Github 上的文件,提供了 ETag HTTP 标头,可用于避免下载整个文件。

php -r 'var_dump(json_decode(get_headers("https://raw.githubusercontent.com/getopt-php/getopt-php/master/src/CommandInterface.php", 1)["ETag"]));'
//string(64) "c0153dbd04652cc11cddb0876c5abcc9950cac7378960223cbbe6cf4833a0d6b"
<块引用>

ETag HTTP 响应头是特定版本的标识符 的一个资源。它让缓存更高效并节省带宽,因为 Web 服务器不需要重新发送完整的响应,如果内容 没有改变。

答案 4 :(得分:-1)

Warning: include() [function.include]: URL file-access is disabled in the server configuration in /home/content/91/8151691/html/HolidaySavers.ca/europe-destinations-canada.php on line 52

说了一切。我相信这叫做XXS。您似乎正在尝试包含基于URL的文件,该文件在您的服务器配置中被拒绝,这是以下两种情况之一。

  1. 您尝试在网站A上包含该文件,然后您将使用该文件而不是include('WhateverFile'); file_get_contents('WhateverFile');,但这只会返回客户端数据,因为它是HTTP请求;

  2. 您已在网站B上复制了该文件,忘记更新域配置。确保包含路径反映您正在运行脚本的站点,即

    include(dir($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR . 'WhateverFile.php');
    
  3. 无论如何。我必须实际检查所述文件中的第52行,看看为什么PHP会向你抱怨详细信息lol