Ошибка с PHP 5.6 до PHP 7.2.4.Include_once не работает - PullRequest
0 голосов
/ 19 мая 2018

Видео, иллюстрирующее проблему в реальном времени, доступно здесь:

ссылка: 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

Я изменил include_path в php.ini, просто пытаясь найтирешение.Однако это не сработало.

Файлы правильно размещены (на видео видно, что сайт работает отлично), и ничего больше не делается, кроме изменения версий 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

Спасибо за ваше время.

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Вы должны использовать __DIR__ магическая константа для генерации правильных абсолютных путей к файлам.Например:

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

getcwd() может дать вам неожиданные результаты - для этих 2 вызовов будет возвращено другое значение:

php index.php
php myapp/index.php

, так как вы звоните index.php из двухразные места.__DIR__ всегда будет возвращать одно и то же значение независимо от места, где вы запускаете PHP-скрипт.

0 голосов
/ 19 мая 2018

косая черта / для пути к корневому каталогу, поэтому просто удалите косую черту / на пути включения

include_once "app/config.inc.php";
0 голосов
/ 19 мая 2018

Я мог бы решить эту проблему, добавив константу в начало index.php следующим образом:

define("RAIZ",getcwd());

и использовать ее во всех вызовах, что-то вроде этого:

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

И сайт просто работает в обеих версиях PHP.НО, у меня есть другая проблема, которая все еще связана с include_Path.Я задам новый вопрос об этом.

Это решение не очень хорошо для меня выглядит, но сейчас оно работает.

Плз, если у кого-то из вас есть идея получшеили можете сказать мне, что не так с версиями, пожалуйста, скажите мне.

Еще раз спасибо за ваше время.

...