我想要包含一个已经创建到php文件的类,这里我使用 .htaccess 。但是一旦放入php文件,php类就无法在php文件中打开或加载。我网站中的以下目录结构。
htdocs/
mysite/
src/
App/
Login.php <-- class file php
public/
login.php <-- file php
这是登录类( mysite / src / App / Login.php )
class Login {
private $username;
//etc...
}
这是登录文件( mysite / public / login.php )
require('../src/App/Login.php');
$login = new Login();
这是.htaccess文件( mysite / .htaccess )
Options +FollowSymLinks
RewriteEngine On
# skip for existing files/directories (/assets will be skipped here)
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# for public directory
rewritecond %{REQUEST_URI} !^/public/(.*)
RewriteRule .* index.php [L]
和.htaccess文件中的规则的index.php( mysite / index.php )
$requested = empty($_SERVER['REQUEST_URI']) ? false : $_SERVER['REQUEST_URI'];
$server_name = str_replace(basename($_SERVER['SCRIPT_NAME']), "", $_SERVER['SCRIPT_NAME']);
switch ($requested) {
case $server_name:
include 'public/index.php';
break;
case $server_name.'login':
include 'public/login.php';
break;
default:
include 'public/404.php';
}
但是当我打开 localhost / mysite / login 时出现错误
你能帮帮我吗?警告:require(../ src / App / Login.php):无法打开流:没有 文件或目录在C:\ xampp \ htdocs \ mysite \ public \ login.php上 线......
致命错误:require():无法打开所需的'../src/App/Login.php' (include_path ='。; C:\ xampp \ php \ PEAR')in 在线上C:\ xampp \ htdocs \ mysite \ public \ login.php ...
谢谢
答案 0 :(得分:1)
通过您尚未配置应用程序级别include_path
的相对路径来包含文件的简单规则; 始终基于当前脚本的相对路径,例如
// public/login.php
require_once __DIR__ . '/../src/App/Login.php';
由于您从public/login.php
加入index.php
,包含路径包含index.php
的父目录,即mysite
。这适用于所有包含的文件。
当public/login.php
尝试加入../src/App/Login.php
时,它实际上是在尝试打开htdocs/mysite/../src/App/Login.php
。
您可能想要尝试的另一件事是配置应用程序级别包含路径。例如,在index.php
...
set_include_path(implode(PATH_SEPARATOR, [
__DIR__ . '/src/App',
get_include_path()
]));
现在,src/App
目录是执行include
或require
时首次搜索的,因此您只需运行
require_once 'Login.php';
更好的解决方案是注册自动加载器,例如(在index.php
中)
spl_autoload_register(function($class) {
require_once sprintf('%s/src/App/%s.php', __DIR__, $class);
});
然后你可以简单地创建你的课程,而不必担心包含文件......
$login = new Login();