1

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

链接: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):无法打开流:第 3 行的 E:\wamp64\www\ziurfreelance2\index.php 中没有这样的文件或目录

警告:include_once():在 E:\wamp64\www\ziurfreelance2\index 中打开 '/app/config.inc.php' 以包含 (include_path='.;/path/to/php/pear/.;') 失败.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

谢谢你的时间。

4

3 回答 3

1

您应该使用__DIR__魔术常量为文件生成正确的绝对路径。例如:

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

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

php index.php
php myapp/index.php

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

于 2018-05-19T19:22:03.427 回答
0

斜杠/作为根目录的路径,所以只需删除/包含路径上的斜杠

include_once "app/config.inc.php";
于 2018-05-19T19:25:29.457 回答
-1

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

define("RAIZ",getcwd());

并在所有包含调用中使用它,例如:

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

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

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

Plz,如果你们中的某个人有更好的想法或者可以告诉我这些版本有什么问题,请告诉我。

再次感谢您的时间。

于 2018-05-19T19:04:16.823 回答