【问题标题】:Error with PHP 5.6 to PHP 7.2.4. Include_once don´t workPHP 5.6 到 PHP 7.2.4 出错。 Include_once 不起作用
【发布时间】:2018-10-29 14:25:00
【问题描述】:

实时说明问题的视频可在此处获得:

链接:https://www.youtube.com/watch?v=IaTJNS31w6A&feature=youtu.be

我一直在学习网络开发。 PHP新手。

我在本地服务器 WAMP 中创建了一个站点。默认情况下,WAMP 使用 PHP 5.6。当版本更改为 7.2.4 时,该站点无法运行。警告是:

警告:include_once(/app/config.inc.php):打开流失败:否 E:\wamp64\www\ziurfreelance2\index.php 中的此类文件或目录 第 3 行

和

警告:include_once():无法打开“/app/config.inc.php” 包含 (include_path='.;/path/to/php/pear/.;') 在 E:\wamp64\www\ziurfreelance2\index.php 在第 3 行

我更改了php.ini中的include_path,只是想找到一个解决方案。不过没用。

文件已正确放置(在视频中您可以看到该网站运行良好),除了更改 PHP 版本之外没有任何其他操作。

文件放置正确(在视频中您可以看到网站运行良好),只是 PHP 版本不同。

这里的项目树: https://i.pinimg.com/originals/c9/52/68/c9526844ba7a80ba63baeaccab1965e7.png

我真的希望你能帮助我。也许,正如我在某个地方所读到的,该错误与 apache 有关,该信息不是很清楚和具体。

即使在同一个文件中定义一个常量(注意 include_once 调用了所有其他使用的常量所在的 config.inc.php),也许它可以工作,但是为什么版本会破坏它?

这里是index.php(放在根目录下):

<?php

include_once "/app/config.inc.php";

$componentes_url = parse_url($_SERVER["REQUEST_URI"]);
$ruta = $componentes_url['path'];
$partes_ruta = explode("/", $ruta);
$partes_ruta = array_filter($partes_ruta);
$partes_ruta = array_slice($partes_ruta,0);

$ruta_elegida = '/paginas/404.php';


if($partes_ruta == null){

$ruta_elegida = '/paginas/home.php';

}

//para subpaginas de primer nivel

else if(count($partes_ruta) == 1){

    switch($partes_ruta[0]){

        case 'aviso-legal';
            $ruta_elegida = '/paginas/aviso-legal.php';
            break;

        case 'sobre-mi';
            $ruta_elegida = '/paginas/bio.php';
            break;

        case 'blog';
            $ruta_elegida = '/paginas/blog.php';
            break;

        case 'contacto';
            $ruta_elegida = '/paginas/contacto.php';
            break;

        case 'diseno-grafico';
            $ruta_elegida = '/paginas/diseno-grafico.php';
            break;

        case 'diseno-web';
            $ruta_elegida = '/paginas/diseno-web.php';
            break;

        case 'fotografia';
            $ruta_elegida = '/paginas/fotografia.php';
            break;

        case 'modelado';
            $ruta_elegida = '/paginas/modelado.php';
            break;

        case 'video-y-animacion';
            $ruta_elegida = '/paginas/video-y-animacion.php';
            break;

        case 'ziur11235813213455fotos';
            $ruta_elegida = '/paginas/subida-fotos.php';
            break;
        }

}

include_once $ruta_elegida;

这里是 .htaccess:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^.*$ ./index.php

感谢您的宝贵时间。

【问题讨论】:

  • 你的文件树是什么?
  • 如果您的include_once(/app/config.inc.php): 位于根文件夹中的 index.php 上。只需替换为include_once(__DIR__.'/app/config.inc.php'):
  • 抱歉,我无法理解这棵树。该视频现在可用,您可以在其中看到树。 `
  • @Yanis-git,谢谢你的回答,我会试试的。但是¿为什么将 5.6 更改为 7.2.4 会使原始代码不起作用?
  • @Yanis-git 您提出的解决方案仅适用于 index.php,但不适用于其他页面。 home.php 调用其他文件夹中的文件,这些文件是它自己文件夹的“兄弟”。

标签: php php-5.6 php-7.2 include-once


【解决方案1】:

我可以像这样在 index.php 的开头添加一个常量来解决这个问题:

define("RAIZ",getcwd());

并在所有包含调用中使用它,类似这样:

include_once RAIZ."\app\config.inc.php";

而且该网站只适用于两个 PHP 版本。但是,我还有另一个问题,仍然与 include_Path 有关。我会就此提出一个新问题。

这个解决方案在我看来不是很好,但目前它正在工作。

请告诉我,如果你们中有更好的想法或可以告诉我版本有什么问题,请告诉我。

再次感谢您的时间。

【讨论】:

    【解决方案2】:

    您应该使用__DIR__ magic constant 为文件生成正确的绝对路径。例如:

    include_once __DIR__ . '/../app/config.inc.php';
    

    getcwd() 可能会给您带来意想不到的结果 - 这两个调用会返回不同的值:

    php index.php
    php myapp/index.php
    

    因为您从两个不同的地方拨打index.php。无论您在何处运行 PHP 脚本,__DIR__ 将始终返回相同的值。

    【讨论】:

    • 谢谢,我会试试你的建议。
    • 你知道为什么 PHP 5.6 一切正常,但 PHP 7.2 就坏了吗?
    【解决方案3】:

    斜线 / 表示根目录的路径,因此只需删除包含路径上的斜线 /

    include_once "app/config.inc.php";
    

    【讨论】:

    • 谢谢,但我的想法只是从根目录拨打电话。
    • 而且,在 PHP 5.6 中斜杠 (/) 可以正常工作,但在 PHP 7.2 中就不行了,为什么?
    猜你喜欢
    • 2018-12-02
    • 2016-02-24
    • 2016-11-15
    • 1970-01-01
    • 2012-12-24
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    相关资源
    最近更新 更多