我设计了我的代码,将所有重要的函数放在一个现在1800行的PHP文件中.
我在其他PHP文件中调用它 - 例如AJAX处理器 - 使用简单的"require_once("codeBank.php")".
我发现加载所有这些函数大约需要10秒钟,即使我只有一些全局数组和一些其他函数.例如,主要的AJAX处理器代码只需要8秒钟来进行简单的语法验证(其操作函数存储在codeBank.php中).
当我注释掉require_once时,我的AJAX响应时间从10秒加速到40ms,所以很明显PHP试图用这1800行函数做一些事情.即使安装了APC,这也是令人惊讶的.
我应该怎么做才能将我的代码速度恢复到低于100毫秒的水平?我是否未能以某种方式获得缓存的好处?我是否需要将单个功能库文件剪切成不同的部分?是否还有其他微妙的事情可以阻止我的响应时间?
或者除此之外,有哪些工具可以进一步挖掘哪些PHP操作会遇到速度障碍?
==========================
[编辑]已解决.
==========================
正如你们许多人所指出的那样,没有合理的理由说明为什么只有一个1800行的php函数库会导致速度减慢.实际发生的是我有一个调试行调用了一个较长的API调用函数.每当我包含PHP文件时,我都是从远程查询数据构建一个完整的数据结构.
一旦我杀了那条线,一切都回到了快速的30毫秒响应.对我来说遗憾的是,每次调用AJAX脚本时,require_once()都会打开php文件.但是,这就是我的状态,并且忘记了每次AJAX脚本完成时它都会关闭并且每次都重新打开并重新编译.
可能重复:
为什么require_once这么糟糕?
当PHP包含文件时,我假设它将文件名存储在数组中.
然后,当包含另一个文件时,它会检查该数组是否已经包含它,对吧?
那么这里最重要的是什么?为什么人们如此害怕这个阵列检查?这不像是你包含了数百万个文件......
in_array检查是一直进行的.我几乎在所有功能中使用它们:)
所以我正在搞乱twitter api,我希望将这个文件包含在每个页面的页脚中.页脚通过phps require_once函数加载.问题是我无法使用完整的URL,因为url文件acsess因为显而易见的原因被关闭.所以我试着用
require_once $_SERVER['DOCUMENT_ROOT']('/lib/twitter/base.php');
Run Code Online (Sandbox Code Playgroud)
但那失败了.我做错了什么或者我怎样才能做得更好?
其中include,include_once,require和require_once我一直只使用require_once。许多第三方框架也都使用require_once。
有人可以描述必须使用其他构造的真实情况吗?
我们在里面添加一个文件Myfile.php:
require_once 'abc.php';
Run Code Online (Sandbox Code Playgroud)
要么
include_once 'abc.php';
Run Code Online (Sandbox Code Playgroud)
我们将如何删除文件?或者如何abc.php在某段代码之后停止访问文件内容?
我有一个由wordpress制作的网站,我制作了一些我想要执行的php文件,由于某种原因我需要require_once(/wp-includes/class-phpass.php),但我得到了失败打开所需的错误,有一个htaccess文件在根文件夹中并且在wp-includes文件夹中不存在htaccess包含这个:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Run Code Online (Sandbox Code Playgroud)
那怎么解决这个问题?!, 谢谢
编辑
我的wordpress没有安装在root文件夹中,就像root/live一样
我在分配require_once的相对路径时遇到问题.我确定这是一件很简单的事情,我没有看到......
文件夹目录结构级别1:站点级别2:包括级别2:类
so ... site/include/global.php < - 这是从site/class/db.php调用函数自动加载的地方
当我尝试使用时
function__autoload($className)
{
require_once '../class/'.$className.'.php';
}
Run Code Online (Sandbox Code Playgroud)
我得到:
警告:require_once(../ class/db.php)[function.require-once]:无法打开流:没有这样的文件或目录
致命错误:require_once()[function.require]:无法开口所需 '../class/db.php'(包含路径= '; ./包括; ./梨'.)
我究竟做错了什么?如果我将global.php放在类文件夹中,它会正常工作,所以我假设我对导致问题的相对路径的理解很差.
谢谢
我正在编写一个PHP脚本,它通过"require_once()"方法包含了几个外部PHP脚本.我想知道主脚本(包括其他脚本)是否有办法判断包含脚本的处理输出是否生成了任何内容.
因此,例如,用户对特定脚本的权限可能导致PHP不生成任何输出.所以,也许,主脚本会回应如下:
Nothing interesting here!
Run Code Online (Sandbox Code Playgroud)
有没有办法在主脚本中执行此操作,还是需要在包含的脚本中创建这些测试,并将结果返回到主脚本?
感谢您的时间,
spryno724
我正在使用LAMP堆栈来开发PHP应用程序.我使用require_once来包含类文件.我需要在多个PHP页面中使用这些类文件中的函数.所以,我使用require_once在所有必需的PHP页面中包含这些类文件.但是,如果我将这些类文件包含在多个页面中,则PHP文件将变为空白.它什么都没显示.查看源也不显示任何内容.
文件:test.php,process.php和class.test.php
test.php有
<?php
session_start();
require_once 'classes/class.test.php';
.
Few more classes
.
.
?>
<html>
<form name = "myForm" method="POST" action="process.php">
<input type = "text" name="username" value=""/>
<input type = "submit" value="Submit" />
</form>
</html>
Run Code Online (Sandbox Code Playgroud)
process.php
<?php
session_start();
require_once 'classes/class.test.php';
$obj_test = new test();
$obj_test->test();
?>
Run Code Online (Sandbox Code Playgroud)
class.test.php
<?php
session_start();
require_once 'class.misc.php';
require_once 'config.php'; //DB connection details
function test()
{
$obj_misc = new misc();
$id = $obj_misc->random_ID();
$username = $_POST['username'];
$query = "INSERT INTO test_table VALUES ('$id','$username',NOW());
mysql_query($query);
}
?>
Run Code Online (Sandbox Code Playgroud)
现在,它返回一个空白页面.如果我在process.php中注释掉require_once,test.php页面会显示表单,但在提交表单时,process.php会抛出错误"找不到类测试". …
我需要require_once这个文件main.class.php,并functions.php和config.php到admin/test.php.如何找到php需要真正的路径?!
注:main.class.php在class folder,functions.php在includes folder和config.php在root目录test.php中admin folder.
文件目录:
root
/admin/
->test.php
/class/
->main.class.php
/includes/
->functions.php
/templates
config.php
phpinfo.php
Run Code Online (Sandbox Code Playgroud) php ×10
require-once ×10
.htaccess ×1
ajax ×1
arrays ×1
include ×1
php-include ×1
realpath ×1
require ×1
wordpress ×1