我有一个计划任务,定期运行脚本(每小时).此脚本与数据库和文件系统进行了一些繁重的交互,并且通常需要几分钟才能运行.问题是,当脚本运行时服务器的cpu使用率激增并减慢正常操作.有没有办法限制这个过程,以便它需要更长的时间,但不消耗尽可能多的资源?
我已经查看了PHP的不同配置选项,但似乎没有任何适合我的需求.
将php.ini中的memory_limit设置为较低的值会导致我的数据对象很容易溢出.
我看过类似的帖子,人们建议在脚本中的某些点使用sleep(),但这并不妨碍脚本加入服务器.
最佳解决方案是告诉灯(在这种情况下为Wamp)堆栈仅使用10%最大CPU利用率.我并不关心运行时,如果它意味着每秒节省cpu周期,则更愿意花费更长的时间.我的替代解决方案是设置一个具有数据库复制的不同服务器,这样cron可以进入城镇而不会减慢其他所有内容.
环境:Windows Server 2k3,Apache 2.2.11,PHP 5.2.9,MySQL 5.1
我很欣赏这种情况.
编辑:我感谢所有的答案,甚至是那些*nix特定的答案.在我的情况下,改变托管环境仍然足够早.希望无论操作系统如何,这个问题都可以帮助其他人.
如何从php中发现慢查询日志的文件系统位置?我想通过查询动态执行此操作(如果可能,或其他一些运行时方法),而不是解析任何my.ini文件.
如果没有,那么如何声明一个双重类型的数字?
function testFloat(float $f)
{
return $f;
}
echo testFloat(1.2);
Run Code Online (Sandbox Code Playgroud)
可捕获的致命错误:传递给testFloat()的参数1必须是float的实例,double给出
在我的一个PHP项目中,imagecreatefrompng抱怨说图像"不是有效的PNG文件".
Warning: imagecreatefrompng() [function.imagecreatefrompng]:
'/.../...png' is not a valid PNG file in /.../...php on line ...
Run Code Online (Sandbox Code Playgroud)
我很确定,该文件是有效的,因为我可以在任何程序中打开它.所以我想知道还有什么可能导致这个警告.
有人知道imagecreatefrompng背后的细节还是之前有过类似的问题?
谢谢你的帮助,
蒂莫
我正在尝试使用PHP下载网页的内容.当我发出命令时:
$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2");
Run Code Online (Sandbox Code Playgroud)
它返回一个报告服务器已关闭的页面.然而,当我将相同的URL粘贴到我的浏览器中时,我得到了预期的页面.
有谁知道是什么导致了这个?file_get_contents是否会传输任何区别于浏览器请求的标头?
在练习测试中有一个有趣的问题,我不明白答案.以下代码的输出是什么:
<?php
class Foo {
public $name = 'Andrew';
public function getName() {
echo $this->name;
}
}
class Bar extends Foo {
public $name = 'John';
public function getName() {
Foo::getName();
}
}
$a = new Bar;
$a->getName();
?>
Run Code Online (Sandbox Code Playgroud)
最初,我认为这会产生错误,因为静态方法不能引用$ this(至少在PHP5中).我自己测试了这个,它实际输出约翰.
我添加了Foo :: getName(); 在脚本的末尾,确实得到了我期待的错误.那么,当你从一个扩展你要调用的类的类中调用静态方法时会发生什么变化?
谁会介意详细解释这里发生了什么?
我想让我的用户选择列出的任何类型的文件,并将它们作为zip文件夹下载并下载.文件可能是.doc,.jpeg,.ppt等
我使用基于SESSION变量的简单登录系统.用户登录后,会设置会话变量,告诉我的脚本要接受用户.我不使用任何自定义客户端cookie变量.
我想在登录屏幕上提供"让我记录一整天"的选项.如何以安全的方式做到这一点?
我试图让我的头围绕mysql.谁能告诉我为什么这个mysql查询不起作用?我收到以下错误:
警告:mysqli_error()预计在第11行的/home/freebet2/public_html/test.php中给出了1个参数0
test.php的
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/db.php');
$conn = db_connect();
$result = $conn->query("ALTER TABLE users ADD COLUMN refer_old INT(10) AFTER refer_id");
if(!$result){
echo "Error with MySQL Query: ".mysqli_error();
}
?>
Run Code Online (Sandbox Code Playgroud)
db.php中
<?php
function db_connect() {
$result = new mysqli('localhost', 'user', 'password', 'db');
if (!$result) {
throw new Exception('Could not connect to database server');
} else {
return $result;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
如果我将alter string更改为:$result = $conn->query("SELECT * FROM users refer_id");我出于某种原因没有错误.
如果当前时间($ time)超过30秒($djs['currenttime']),我将如何构造一个语句?它会是什么样的
if($time => $djs['currenttime'])?我无法用30秒来弄清楚.. :).
谢谢 :).