您好,我正在将 php 文件从一个网站实现到另一个网站,这是我在尝试使用已实现的 php 文件打开以下页面时收到的以下错误消息:
http://www.holidaysavers.ca/europe-destinations-canada.php
基本上我从一个网站导入到另一个网站的 php 文件是相同的,但是它们在原始网站上工作,但是当我将它们实施到新网站时它不再工作了。
你能帮我解决这个问题吗?
谢谢你
您好,我正在将 php 文件从一个网站实现到另一个网站,这是我在尝试使用已实现的 php 文件打开以下页面时收到的以下错误消息:
http://www.holidaysavers.ca/europe-destinations-canada.php
基本上我从一个网站导入到另一个网站的 php 文件是相同的,但是它们在原始网站上工作,但是当我将它们实施到新网站时它不再工作了。
你能帮我解决这个问题吗?
谢谢你
您不能将外部网站/服务器上的 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');
你能从“europe-destinations-canada.php”发布代码吗?看起来脚本要求在这个新站点/服务器上执行您的 php 设置中未配置的内容
我真的不知道您使用的是哪种主机,或者如果您使用的是 Xampp,我确实有一个简单的修复方法,适用于 xampp 和可能的其他 Web 服务器软件。转到您的 php.ini 文件,您可以搜索或仅在 中查找它c:\\xampp\php\php.ini
,它php.ini
应该在服务器软件文件夹的 php 文件夹中。现在在 php.ini 文件中搜索,allow_url_include
然后将 Off 替换为 On,如果它还没有打开的话。这很可能是解决方法,因为它对我有用。
如果我知道您使用的是托管服务器还是家庭服务器,我可能会提供进一步的帮助。如果您使用的是托管网站,请分享您使用的托管服务类型,以便我进一步检查。
以随机远程 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 服务器不需要重新发送完整的响应。
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 的文件,该文件在您的服务器配置中被拒绝,这是两件事之一。
您正在尝试从站点 A 包含站点 B 上的文件,然后您将使用该文件而不是include('WhateverFile');
file_get_contents('WhateverFile');
但是这只会返回客户端数据,因为它是 HTTP 请求;
您在站点 B 上复制了该文件,但忘记更新域配置。确保包含路径反映了您正在运行脚本的站点,即。
include(dir($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR . 'WhateverFile.php');
任何状况之下。我将不得不实际检查所述文件上的第 52 行,以了解 PHP 向您详细抱怨的原因,哈哈