PHP 5.6 到 PHP 7.2.4 出错。 Include_once 不工作

Error with PHP 5.6 to PHP 7.2.4. Include_once don´t work

此处提供实时说明问题的视频:

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

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

的新手

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

Warning: include_once(/app/config.inc.php): failed to open stream: No such file or directory in E:\wamp64\www\ziurfreelance2\index.php on line 3

Warning: include_once(): Failed opening '/app/config.inc.php' for inclusion (include_path='.;/path/to/php/pear/.;') in E:\wamp64\www\ziurfreelance2\index.php on line 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

谢谢你的时间。

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

define("RAIZ",getcwd());

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

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

而且该站点在两个 PHP 版本中都可以使用。但是,我还有另一个问题,仍然与 include_Path 有关。我将对此提出一个新问题。

这个解决方案对我来说不是很好,但现在,它正在工作。

Plz,如果你们中有人有更好的主意或者可以告诉我版本有什么问题,请告诉我。

再次感谢您的宝贵时间。

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

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

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

php index.php
php myapp/index.php

因为您是从两个不同的地方呼叫 index.php__DIR__ 将始终 return 相同的值,无论您在 运行 PHP 脚本中的位置如何。

斜杠 / 用于根目录的路径,因此只需删除包含路径

上的斜杠 /
include_once "app/config.inc.php";