存档

‘php学习’ 分类的存档

linux系统ubuntu如何实现按秒执行定时任务crontab

2019年10月11日 没有评论

在linux系统ubuntu下现在要实现按秒执行定时任务,可惜在系统默认的文件夹下面有按分钟,小时,周,天,月执行,但是无按分钟执行,这个时候就需要我们自己来实现了。

比如我们要实现按每10分钟执行一次,那么就需要操作:
sudo vim /etc/crontab

*/1 * * * * root /usr/bin/php -f /www/test.php
*/1 * * * * root sleep 10; /usr/bin/php -f /www/test.php
*/1 * * * * root sleep 20; /usr/bin/php -f /www/test.php
*/1 * * * * root sleep 30; /usr/bin/php -f /www/test.php
*/1 * * * * root sleep 40; /usr/bin/php -f /www/test.php
*/1 * * * * root sleep 50; /usr/bin/php -f /www/test.php

以上操作即可实现:linux系统ubuntu如何实现按秒执行定时任务crontab

php根据单个年月日文件夹总量返回下一个年月日文件夹名称

2019年10月10日 没有评论
<?php
$page=10;//起始的默认开始年月日
$row=$db->query_first('select id,years,length from photo_path_ymd_temp where id=1 limit 1');
$start_date=$row['years'];
$length=$row['length'];

function getymd_temp($start_date,$length,$page){
	if(empty($start_date) && empty($length)){
		$start_date='20130101';
	}
	$length=$length+1;
	if($length==$page+1){//不能用%运算
		$start_date=date('Ymd',strtotime($start_date)+86400);
		$length=1;//注意,这里初始值应该为1
	}
	return array($start_date,$length);
}

for($i=1;$i<=2000;$i++){//测试2000条
	$ymdPathArr=getymd_temp($start_date,$length,$page);
	$start_date=intval($ymdPathArr[0]);
	$length=$ymdPathArr[1];
	
	$db->query('update photo_path_ymd_temp set years='.$start_date.',length='.$length.' where id=1 limit 1');
	echo substr($start_date,0,4).substr($start_date,4,2).'/'.substr($start_date,6,2).':'.$length.'<br />';
}
?>

附上mysql表的sql语句

DROP TABLE IF EXISTS `photo_path_ymd_temp`;
CREATE TABLE `photo_path_ymd_temp` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `years` int(8) DEFAULT '0' COMMENT '年月日',
  `length` int(11) unsigned DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of photo_path_ymd_temp
-- ----------------------------
INSERT INTO `photo_path_ymd_temp` VALUES ('1', '0', '0');

php-fpm模式下间歇性无法获取不到$_SERVER或者$_REQUEST数据

2018年7月3日 没有评论

最近安装了一台新的服务器,nginx+php-fpm模式

使用过程中发现$_SERVER或者$_REQUEST(不排除$_POST或者$_GET)间歇性无法获取数据

但是只要重启php-fpm服务就可以解决,但是运行一段时间之后又会反复出现

由此分析应该为php-fpm问题(重启可以解决,个人推测为php-fpm进程问题),一开始以为是当前版本php的bug,后来降低php版本后依然存在,找了很多google资料,都没有遇到类似问题。

花了2天左右时间,对服务器软件配置文件参数逐一排查调试,都没有找到问题所在。

最后,只能从拓展插件上着手,暂时锁定了问题所在:

xcache拓展和opcache拓展建议只开启一个,似乎discuz里面用的是xcache,所以建议只安装xcache
在php-fpm模式下,如果同时安装xcache和opcache,会导致莫名其妙的$_SERVER或者$_REQUEST无法获取数据(间歇性)

所以个人推测:2个都用的话(双层cache)会导致php-fpm的部分进程假死,前段请求发送到假死的进程上后,则无法返回数据,当发送到没假死的进程就可以返回数据(当重启php-fpm服务又正常了)

关闭opcache拓展后,目前运行了近1.5天,已经没有发现此问题。

php循环输出$_POST和$_GET数据

2018年6月4日 没有评论

以下代码可以实现php循环输出$_POST和$_GET数据

<?php
if($_POST){
foreach($_POST as $key =>$value){
$val .= ‘post:’.$key.”:”.$value.”\r\n”;
}
if($val){
$myfile = fopen(‘post.’.date(‘Y-m-d-H-i-s’).”.txt”, “w”) or die(“Unable to open file!”);
fwrite($myfile, $val);
fclose($myfile);
echo ‘post接收成功…’;
}
else {
echo ‘post接收失败…’;
}
}

if($_GET){
foreach($_GET as $key =>$value){
$val .= ‘get:’.$key.”:”.$value.”\r\n”;
}
if($val){
$myfile = fopen(‘get’.date(‘Y-m-d-H-i-s’).”.txt”, “w”) or die(“Unable to open file!”);
fwrite($myfile, $val);
fclose($myfile);
echo ‘get接收成功…’;
}
else {
echo ‘get接收失败…’;
}
}
?>

分类: php学习 标签: , ,

php新建随机图片或者文件保存文件名,可以防止不重复。

2017年9月26日 没有评论

php新建随机图片或者文件保存文件名,可以防止不重复。请使用以下函数。如果需要可以稍作修改。

function randPicName(){
$time=explode(‘ ‘,microtime());
return $time[1].sprintf(‘%06u’,substr($time[0],2,6)).mt_rand(100000,999999).substr(‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’,(mt_rand(0,61)),1).substr(‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’,(mt_rand(0,61)),1);
}

分类: php学习 标签: , ,
css.php