如何让Linux后台运行命令或php

用 telnet/ssh 登录Linux 服务器,运行了一些耗时较长的任务, 结果却因为关闭远程窗口任务中途失败。这是我们就需要用到Linux的后台运行命令
基础方法:下达的命令后面加上&,就可以使该命令在后台进行工作,这样做最大的好处就是不怕被ctrl+c这个中断指令所中断。可以通过执行fg来将其恢复到前台。有多个进程在后台运行,需要恢复到前台来执行的时候,就要可以用jobs列出所有在后台执行的进程,那个中括号([ ])里面的数字就是jobs代号,从而通过fg 数字恢复指定的后台进程.
进阶方法:以上方法只是把命令放入后台,他还是会跟远程窗口绑定在一起,一旦远程窗口关闭,这些后台运行的资源也会被释放,从而是任务终止,要想真正后台运行就需要用nohup
nohup php cli.php &
会有提示:
[~]$ appending output to nohup.out
运行成功,同时把程序运行的输出信息放到当前目录的 nohup.out 文件中去
这样就是真正的后台运行了


centos6服务器YUM安装LNMP(LINUX+NGINX+MYSQL+PHP)

之前都用的lamp,这次配置一个lnmp来看看,试试Nginx是不是好用
关闭SELINUX
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
shutdown -r now #重启系统
安装ngnix
安装GCC编译器及相关工具
yum -y install gcc gcc-c++ autoconf automake
安装模块依赖的库
yum -y install zlib zlib-devel openssl openssl–devel pcre pcre-devel
更新系统时间
ntpdate time.nist.gov
让对时服务开机启动
chkconfig ntpd on
如果需要编译安装最新的
获取ngnix版本
wget http://nginx.org/download/nginx-1.0.14.tar.gz
tar zxvf nginx-1.0.14.tar.gz
cd nginx-1.0.14
直接yum安装
yum install -y nginx
将安装在/usr/share/nginx/
启动nginx
service ngnix start
安装PHP
cd /etc/yum.repos.d
wget http://dev.centos.org/centos/5/CentOS-Testing.repo
rpm –import http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
yum install -y php php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt [...]


如何使用php日志调试rewrite规则(不受apache和iis限制)

需要在IIS和apache同时调试好静态重写的规则,发现调试rewrite规则真是个神一样的工作,你根本就不知道它到底怎么翻译的,解析到哪里去了。
在网上搜了一下,发现一个朋友在apache下开启了配置文件中的一下两个选项
RewriteLog “/myfolder/mylogfile.log”
RewriteLogLevel 9
这样apache可以自动生成一个重写日志,看着日志调试就方便了
Rewriteloglevel 0 代表关闭,9代表开启最大debug输出,调为9可以看到最详细的重写匹配信息
可是IIS环境呢,这个有点麻烦,于是我用网上搜的一个log类来做日志
大致原理是这样的,在网站的index.php这里写一段
$log = new log(“/logs/sys.log”);
$log->logThis($_SERVER["REQUEST_URI"]);
//$_SERVER["REQUEST_URI"] 是重写的实际执行页面
///logs/sys.log也可以写成别的地址,比如你网站根目录的一个地址,这样你可以通过浏览器来查看日志了
这样的日志结果会是这样的效果
2012-02-28 16:27:04 115.174.56.7 /index.php?action=list&catid=4&pageid=3
2012-02-28 16:27:06 115.174.56.7 /index.php?action=list&catid=7&pageid=6
2012-02-28 16:27:08 115.174.56.7 /index.php?action=list&catid=13&pageid=2
有了日志调试,规则就不再是问题了


php中json编码和解码的一些提示

对于php下的web service应用,json因其快速,轻量在小数据量传输的时候非常有优势,但用的时候有些小细节需要注意。我就是把数组存进去,再取出来的时候发现变成对象了,才发现原来是这样。
在运行环境上,json在php5.2以上才是内置的。
常用的方法是json_encode和json_decode。
json_encode的参数只有一个,就是要被转换的数据,而json_decode就不一样,他可以把json格式转换成对象(object)和数组两种
下面是个例子
$arr = array(”1″,”2″,”3″);
print_r($arr);
echo json_encode($arr);
print_r(json_decode(json_encode($arr)));
print_r(json_decode(json_encode($arr), true));
如果数组转成json,想解码回来的,别忘了加个参数true


linux centos 5 lamp(apache mysql php) yum自动安装shell脚本

手头有N台linux centos 5的服务器,每次配置都要打很多命令,不想这么烦下去了。
自己写了一个自动安装脚本,包括了apache mysql php的自动Yum安装。最后还设置了防火墙。
记录一下,想要源文件的可以跟我要。
别忘了,给这个文件这是一个执行权限,简单的来就是chmod 7777
#! /bin/bash
yum -y install httpd php mysql mysql-server php-mysql
echo ‘install httpd,php,mysql,php success’
# define auto run
/sbin/chkconfig httpd on
/sbin/chkconfig –add mysqld
/sbin/chkconfig mysqld on
echo ‘define httpd mysqld autorun success’
# start service
/sbin/service httpd restart
/sbin/service mysqld restart
echo ’start httpd mysqld success’
#define mysql password
mysqladmin -u root password ‘ismurray’
echo ‘define mysql password success’
# install apache ext
yum -y [...]


如何解决PHP XML RPC中文乱码问题

为了一个项目在做XMLRPC的应用。发现项目服务器上没有XMLRPC组件,又要重新编译PHP,头大…
找了很多资料发现,国外的一个叫PHPXMLRPC的开源代码很好用。直接代替XMLRPC组件。他在GOOGLE有托管。国内用的还不多,很多东西都要自己摸索着搞。
这个PHPXMLRPC写的很好,我们只要把它用到的时候加载进来,然后NEW一下就好。以下是我这里总结的相对好用的用法
//载入相关文件
require ‘xmlrpc.inc’;
$forxmlrpc = array(); //初始化数组,传输必要参数
$forxmlrpc['title'] = $content['title'];
$forxmlrpc['contentid'] = $contentid;
$f=new xmlrpcmsg(’popcms.new’,array(new xmlrpcval(1, “int”),new xmlrpcval(’murray’, “string”),new xmlrpcval(’123′, “string”),php_xmlrpc_encode($forxmlrpc))); //新建一个XML格式
$c=new xmlrpc_client(”xmlrpc.php”, “www.popcms.net”, 80); //新建一个客户端
$c->request_charset_encoding = ‘utf-8′; //初始化时的编码格式,如果有中文,这一点是必须的,不然有乱码
$c->setDebug(1); //开启出错选项
$r=&$c->send($f); //发送请求
//以下是调试返回数据的代码
if(!$r->faultCode())
{$v=$r->value();
print “</pre><br/>State number ” . $stateno . ” is “. htmlspecialchars($v->scalarval()) . “<br/>”;
}else{
print “An error occurred: “;
print “Code: ” . htmlspecialchars($r->faultCode()). ” Reason: ‘” . htmlspecialchars($r->faultString()) . “‘</pre><br/>”;
}
虽然现在可以正常发送接收数据,但是还是会出现传递过程中的中文乱码。
原来PHPXMLRPC会自动转换编码,但提交后是乱码,是因为默认指定的是ISO-8859-1编码,而这个参数就是xmlrpc_internalencodeing,具体的操作步骤是:

打开?xmlrpc.inc 第222行, 将
$GLOBALS['xmlrpc_internalencoding']=’ISO-8859-1′;
改成
$GLOBALS['xmlrpc_internalencoding']=’UTF-8′;
至此XMLRPC的中文乱码问题解决了。


如何解决PHP Error: Permission denied in Unknown on line 0

今天在UCHOME的时候,自己新建了个文件,并上传到新的服务器,可是却莫名其妙的出现这样的出错:
PHP Warning: Unknown(/*****/***.php): failed to open stream: Permission denied in Unknown on line 0
开始以为是自己uchome的程序有问题。经过检查,确认没有程序错误。这个错误提示也太模糊啦,初的一看,真让人一头雾水,不知道从何下手。只好在网上找资料。原来根据错误的提示“Permission denied”,这个可能是文件权限的问题,于是修改权限为777,问题解决。


ecshop下can’t parse to JSON出错的一种解决思路

ecshop是一个php下非常常用的开源商城系统,他的ajax的功能非常强大,几乎所有的操作都涉及到了异步操作。
正因为如此,他的模版制作门槛就有点高,你会时不时地发现,这个不显示了,那个不能操作了。除非你用默认模版,不然有你搞得。
根据我的经验,很多情况,如果我们发现功能不能用,该有反应的地方突然没有反应了,我们应该先检查你的模板文件里是不是包含了以下这段代码

var process_request = “正在处理您的请求…”;

这几乎是最常见的AJAX错误,也是发生最多的。
不过这次我做要提到的解决思路要复杂很多。这个错误不常发生,却很难找到解决办法。
当我们点击购买按钮时候,这个商品应该是自动进入购物车,但动作没有响应。如果你在ie下,会出现JS报错。
Exception thrown and not caught (抛出的异常没有被接住)
如果我们用工具调试,会发现类似这样的报错
Fatal error: Bad string at offset 2: {\”spec\”:[],\”goods_id\”:4154,\”number\”:1,\”parent\”:0}
联动文章:http://bbs.ecshop.com/thread-109570-1-1.html (他遇到的问题很我类似)
我先说解决办法:从报错,我们可以看到错误出在了第二反斜杠上。默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。而ECSHOP没有对POST的数据进行过滤。
简单的解决办法: 在FLOW.php文件的57行,像我这样加上过滤
$_POST['goods'] = stripslashes(json_str_iconv($_POST['goods']));
我中间我一度认为是ecshop的transport和jquery冲突,因为我把ECSHOP做为一个插件插到了PHPCMS2008中。唉,走了很多弯路,做了很多调试才发现这个小Bug的,希望大家不要走我的老路。
联动讨论:http://bbs.ecshop.com/thread-76312-1-1.html


无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装的错误解决办法

在设置phpmyadmin时,经常会遇到“”的错误,网上查了很多资料发现,这个办法比较靠谱
1.确保您的php安装正确。phpinfo可以正常预览
2.打开您的php.ini配置文件session.save_path = “某个路径”检查该项是否配置正确,尤其确定这个目录是否存在,我们经常会遇到我们只拷过来了配置文件,没有看环境路径的问题
3.如果是WINDOWS的服务器检查temp目录的权限,请确保有internet来宾账户权限
4.使用phpinfo函数查看您的php安装情况,并检查Loaded Configuration 该项配置是否正确,如果该项显示为none
经过以上的步骤,我们就基本可以搞定了


解决PHP Warning: Cannot modify header information - headers already sent by的终极方案

原因分析:在PHP里Cookie的使用是有一些限制的。
1、使用setcookie必须在标签之前
2、使用setcookie之前,不可以使用echo输入内容
3、直到网页被加载完后,cookie才会出现
4、setcookie必须放到任何资料输出浏览器前,才送出
解决方案:
1,文件开头写上ob_start();
ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
2,php.ini 把 output_buffering 设为 on 重起apache
3,部分情况是多出现在UTF编码的文件。因为在一般的文本编辑器(记事本),尤其是微软的各种产品,在编辑完保存完后,总是会自动在最前面缀上一个BOM,在windows 托管的服务器上没问题,而在UNIX服务器上就会产生问题。比如在代码中用到session或header时,因前有看不见的BOM
你可以用写字板打开,光标移到最前面,先退行,在按delete键去掉刚才加的那一空行。在保存的时候,写字板总是回保存为UTF-8编码的格式;同样你可以在dreamweaver的专业编辑器中已定为UTF-8格式进行编辑。