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";
此处提供实时说明问题的视频:
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";