我正在尝试用php创建引导程序文件。索引.php文件是根目录下的引导程序文件。
define('ROOT',getcwd().DIRECTORY_SEPARATOR);
function url(){
return sprintf(
"%s://%s%s",
isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
);
}
在这里,我有上面的代码来获取所有 php 文件中的根目录和基本 url。 所以,我有 .htaccess 文件重定向到索引.php对于所有请求。
Options +FollowSymLinks
IndexIgnore */*
# Turn on the RewriteEngine
RewriteEngine On
# Redirect to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
我已经创建了用于测试bootstrap(test.php)的php文件
<?php
echo ROOT." ".url();
?>
我以 http://localdomain.com/HRPayroll/test.php 浏览在这里,页面显示错误。
Fatal error: Call to undefined function url()
在这里,我想通过 index.php 重定向所有请求。在这种情况下,我想在上面的 url 测试中打印 url() 的返回值.php这有什么问题,我是否正确地创建了引导程序?
看起来 cske 已经有了解决方案,但我只是想添加它来调试这种事情并修复将来的问题,您可以执行以下操作之一:
-
检查您的 Apache 日志中是否有错误。
-
从命令行运行.php文件并查看输出的错误。
-
向代码添加调试,并将信息输出到网页。例如,对于您在此处遇到的问题,您可以调用 http://php.net/manual/en/function.function-exists.php 并在网页上打印"true"或"false"。
将 调试类添加到代码并将调试信息写入文件而不是直接写入网页,然后可以在代码上线后根据需要进行调试。
您还应该设置 http://php.net/manual/en/function.error-reporting.php 以便获得所有错误输出。
<?php
include('bootstrap.php');
echo ROOT." ".url();
?>
或者 http://www.php.net/manual/en/ini.core.php#ini.auto-prepend-file
索引.php
define('ROOT',getcwd().DIRECTORY_SEPARATOR);
function url(){
return sprintf(
"%s://%s%s",
isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
);
}
include('test.php');
测试.php
<?php
echo ROOT." ".url();
?>
和 http://localdomain.com/HRPayroll/(RewriteCond %{REQUEST_FILENAME} !-f
)
当你说
RewriteCond %{REQUEST_FILENAME} !-f
平均请求的资源不是一个文件,但test.php实际上是一个文件,它会加载它。
如果要实现控制器,视图等,请从根目录中删除测试文件并将其放置在可通过索引访问的位置.php
索引.php
define('ROOT',getcwd().DIRECTORY_SEPARATOR);
function takeAction($className,$method,$args=array()){
$path="protected/class.{$className}.php";
if(file_exists($path)){
include_once($path);
$instance=new $className();
$instance->$method($args);
}else
throw new Exception('Invalid resource .... ');
}
$className=isset($_GET['className']) ? $_GET['className'] : 'defaultClass';
$action=isset($_GET['action']) ? $_GET['action'] : 'index';
$params=$_GET; //
takeAction($className,$action,$params);
您应该有一些约定来翻译您的网址,例如
http://www.mydomain.com/[className]/[action]/[parameter]
最适合您的教程是 zend 路由器
当然这不是经过测试/工作代码