Видео, иллюстрирующее проблему в реальном времени, доступно здесь:
ссылка на сайт: https://www.youtube.com/watch?v=IaTJNS31w6A&Функция = 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
Спасибо за ваше время.
Вы должны использовать __DIR__
магическая константа генерировать правильные абсолютные пути для файлов. Например:
include_once __DIR__ . '/../app/config.inc.php';
getcwd()
может дать вам неожиданные результаты — он вернет другое значение для этих 2 вызовов:
php index.php
php myapp/index.php
так как ты звонишь index.php
из двух разных мест. __DIR__
всегда будет возвращать одно и то же значение независимо от того, где вы используете PHP-скрипт
слэш /
для пути к корневому каталогу, так что просто удалите косую черту /
на вашем пути включения
include_once "app/config.inc.php";
Я мог бы решить эту проблему, добавив константу в начале index.php так:
define("RAIZ",getcwd());
и использовать его во всех вызовах, что-то вроде этого:
include_once RAIZ."\app\config.inc.php";
И сайт просто работает в обеих версиях PHP. НО, у меня есть другая проблема, которая все еще связана с include_Path. Я задам новый вопрос об этом.
Это решение выглядит не очень хорошо для меня, но сейчас это работает.
Плз, если кто-то из вас имеет лучшую идею или может сказать мне, что не так с версиями, пожалуйста, скажите мне.
Еще раз спасибо за ваше время.