ubuntu 9 xampp开机启动方法

最近一直进行lamp开发有兴趣的朋友可以互相学习.
1.以root的身份登入
2. 在/etc/init.d 目錄下建立lampp.sh 文件
lampp.sh 內容如下:
#!/bin/sh #!/bin/sh
cd /opt/lampp
./lampp start
3.更改权限
chmod 755 lampp.sh
4.编辑/etc/init.d/rc.local在最后一行加上:
exec /etc/init.d/lampp.sh
重新开机就完成了。
注:这种方法就算开机后没有登入,XAMPP还是会启动。

ubuntu lampp 开启方法 lampp start

本来就是想把windows上的一些东西迁移到linux上,所以装完了系统就要装运行环境,首先就是lampp。
1、下载文件。由于直接连接的下速度太慢,所以我选择的是先在winxp下用迅雷下载,然后将下载到的文件放到ubuntu挂载的共享文件夹下,然后ubuntu再在共享下把文件取走。下载地址:http://sourceforge.net/project/showfiles.php?group_id=61776&package_id=60248
2、解压。切换到你的下载文件位置 以root身份 运行tar xvfz xampp-linux-1.7.1.tar.gz,解压出来之后再将文件夹切走,放到/opt/下。
3、运行。切换到/opt/lampp 运行 sudo ./lampp start即可。
注释:xampp官方网站上面第三步写的所 “切换到/opt/lampp 运行 lampp start” 这样的华ubuntu总所会报找不到指令的错误。
如有错误请在下方留言。本人将一一回答。

mysql的事务处理机制

由于项目设计里面,牵扯到了金钱的转移,于是就要用到MYSQL的事务处理,来保证一组处理结果的正确性
用了事务,就不可避免的要牺牲一部分速度,来保证数据的正确性。
只有InnoDB支持事务
事务 ACID Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性
一组事务,要么成功;要么撤回。
2、稳定性
有非法数据(外键约束之类),事务撤回。
3、隔离性
事务独立运行。
一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
事务的100%隔离,需要牺牲速度。
4、可靠性
软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
开启事务
START TRANSACTION 或 BEGIN
提交事务(关闭事务)
COMMIT
放弃事务(关闭事务)
ROLLBACK
折返点
SAVEPOINT adqoo_1
ROLLBACK TO SAVEPOINT adqoo_1
发生在折返点 adqoo_1 之前的事务被提交,之后的被忽略
事务的终止
设置“自动提交”模式
SET AUTOCOMMIT = 0
每条SQL都是同一个事务的不同命令,之间由 COMMIT 或 ROLLBACK隔开
掉线后,没有 COMMIT 的事务都被放弃
事务锁定模式
系统默认: 不需要等待某事务结束,可直接查询到结果,但不能再进行修改、删除。
缺点:查询到的结果,可能是已经过期的。
优点:不需要等待某事务结束,可直接查询到结果。
需要用以下模式来设定锁定模式
1、SELECT …… LOCK IN SHARE MODE(共享锁)
查询到的数据,就是数据库在这一时刻的数据(其他已commit事务的结果,已经反应到这里了)
SELECT 必须等待,某个事务结束后才能执行
2、SELECT …… FOR UPDATE(排它锁)
例如 SELECT * FROM tablename WHERE id<200
那么id<200的数据,被查询到的数据,都将不能再进行修改、删除、SELECT …… LOCK IN SHARE MODE操作
一直到此事务结束
共享锁 和 排它锁 的区别:在于是否阻断其他客户发出的 SELECT …… LOCK IN SHARE MODE命令
3、INSERT / More >

mysql 简单索引

就象许多的PHP开发者一样,在刚开始建立动态网站的时候,我都是使用相对简单的数据结构。PHP在连接数据库方面的确实是十分方便(译者注:有些人认为 PHP在连接不同数据库时没有一个统一的接口,不太方便,其实这可以通过一些扩展库来做到这一点),你无需看大量的设计文档就可以建立和使用数据库,这也 是PHP获得成功的主要原因之一。
前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一 粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过一些开发,但却对如何为数据库建立适 当的索引所知较少,因此我起了写一篇相关文章的念头。
最普通的情况,是为出现在where子句的字段建一个索引。为方便讲述,我们先建立一个如下的表。
Code代码如下:CREATE TABLE mytable (
id serial primary key,
category_id int not null default 0,
user_id int not null default 0,
adddate int not null default 0
);
很简单吧,不过对于要说明这个问题,已经足够了。如果你在查询时常用类似以下的语句:
SELECT * FROM mytable WHERE category_id=1;
最直接的应对之道,是为category_id建立一个简单的索引:
CREATE INDEX mytable_categoryid
ON mytable (category_id);
OK,搞定?先别高兴,如果你有不止一个选择条件呢?例如:
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
你的第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。你可以建立多重的索引。
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
注意到我在命名时的习惯了吗?我使用”表名_字段1名_字段2名”的方式。你很快就会知道我为什么这样做了。
现在你已经为适当的字段建立了索引,不过,还是有点不放心吧,你可能会问,数据库会真正用到这些索引吗?测试一下就OK,对于大多数的数据库来说,这是很容易的,只要使用EXPLAIN命令:
EXPLAIN
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2;
This is what Postgres 7.1 returns (exactly as I expected)
NOTICE: QUERY PLAN:
Index Scan using mytable_categoryid_userid on
mytable (cost=0.00..2.02 rows=1 width=16)
EXPLAIN
以上是postgres的数据,可以看到该数据库在查询的时候使用了一个索引(一个好开始),而且它使用的是我创建的第二个索引。看到我上面命名的好处了吧,你马上知道它使用适当的索引了。
接着,来个稍微复杂一点的,如果有个ORDER BY字句呢?不管你信不信,大多数的数据库在使用order by的时候,都将会从索引中受益。
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;
有点迷惑了吧?很简单,就象为where字句中的字段建立一个索引一样,也为ORDER BY的字句中的字段建立一个索引:
CREATE INDEX mytable_categoryid_userid_adddate
ON mytable (category_id,user_id,adddate);
注意: ”mytable_categoryid_userid_adddate” 将会被截短为
“mytable_categoryid_userid_addda”
CREATE
EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;
NOTICE: QUERY PLAN:
Sort (cost=2.03..2.03 rows=1 width=16)
-> Index Scan using mytable_categoryid_userid_addda
on mytable (cost=0.00..2.02 rows=1 width=16)
EXPLAIN
看看EXPLAIN的输出,好象有点恐怖啊,数据库多做了一个我们没有要求的排序,这下知道性能如何受损了吧,看来我们对于数据库的自身运作是有点过于乐观了,那么,给数据库多一点提示吧。
为了跳过排序这一步,我们并不需要其它另外的索引,只要将查询语句稍微改一下。这里用的是postgres,我们将给该数据库一个额外的提示–在 ORDER BY语句中,加入where语句中的字段。这只是一个技术上的处理,并不是必须的,因为实际上在另外两个字段上,并不会有任何的排序操作,不 过如果加入,postgres将会知道哪些是它应该做的。
EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY category_id DESC,user_id DESC,adddate DESC;
NOTICE: QUERY PLAN:
Index Scan Backward using
mytable_categoryid_userid_addda on mytable
(cost=0.00..2.02 rows=1 width=16)
EXPLAIN
现在使用我们料想的索引了,而且它还挺聪明,知道可以从索引后面开始读,从而避免了任何的排序。
以上说得细了一点,不过如果你的数据库非常巨大,并且每日的页面请求达上百万算,我想你会获益良多的。不过,如果你要做更为复杂的查询呢,例如将多张表结 合起来查询,特别是where限制字句中的字段是来自不止一个表格时,应该怎样处理呢?我通常都尽量避免这种做法,因为这样数据库要将各个表中的东西都结 合起来,然后再排除那些不合适的行,搞不好开销会很大。
如果不能避免,你应该查看每张要结合起来的表,并且使用以上的策略来建立索引,然后再用EXPLAIN命令验证一下是否使用了你料想中的索引。如果是的话,就OK。不是的话,你可能要建立临时的表来将他们结合在一起,并且使用适当的索引。
要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
以上介绍的只是一些十分基本的东西,其实里面的学问也不少,单凭EXPLAIN我们是不能判定该方法是否就是最优化的,每个数据库都有自己的一些优化器, 虽然可能还不太完善,但是它们都会在查询时对比过哪种方式较快,在某些情况下,建立索引的话也未必会快,例如索引放在一个不连续的存储空间时,这会增加读 磁盘的负担,因此,哪个是最优,应该通过实际的使用环境来检验。
在刚开始的时候,如果表不大,没有必要作索引,我的意见是在需要的时候才作索引,也可用一些命令来优化表,例如MySQL可用”OPTIMIZE TABLE”。
综上所述,在如何为数据库建立恰当的索引方面,你应该有一些基本的概念了。
来自 blogjava、

PHP中多服务器共享SESSION的方法

在PHP中SESSION默认是用文件来进行保存的,如session.save_path=/tmp,则是将session数据保存在/tmp目 录下,如果并发用户量很大,在这个目录下就会存在大量类似sess_xxxxxx的session文件,导致性能下降,不少朋友可能都没有注意到 php.ini里面Session设置部分中有这样一项:
; session.save_path = “N; MODE; /path”
这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,“MODE”表示目录的权限属性,默认为600,在WINDOWS上基本是不用设置的,*NIX上也可以不用设置,后面的“/path”表示session文件存放的根目录路径,比如我们设置为下面的格式
session.save_path = “2; d:/php5/tmp”
上面的设置表示我们把d:/php5/tmp目录作为php的session文件存放根目录,在该目录下进行两级目录散列,每一级目录分别是 0-9和a-z共36个字母数字为目录名,这样存放session的目录可以达到36*36个,相信作为单台服务器来说,这是完全够用了,如果说您的系统 架构设计为多台服务器共享session数据,可以把目录级增加到3级或者更多。
需要注意的是,php自己并不会自动创建子目录,需要您自己动手去创建,网上找到这样的自动创建目录的代码,大家可以做个参考。下面的代码自动创建3级子目录,可以自己动手根据需要进行修改。
set_time_limit(0);
$string = ‘0123456789abcdefghijklmnopqrstuvwxyz’;
$length = strlen($string);
function makeDir($param)
{
if(!file_exists($param)) {
makeDir(dirname($param));
mkdir($param);
}
}
for($i = 0; $i < $length; $i++) {
for($j = 0; $j < $length; $j++) {
for($k = 0; $k < $length; $k++) {
makeDir($string[$i].’/’.$string[$j].’/’.$string[$k]);
}
}
}
?>
多服务器共享session的方法:
1.通过NFS文件共享的方式,多台WEB服务器共享保存session文件的磁盘
2.保存在数据库中,这种方式的扩展性很强,可以随意增加WEB而不受影响
3.可以将session数据保存在memcached中,memcached是基于内存存储数据的,性能很高,用户并发量很大的时候尤其合适,参考PHP实现多服务器session共享之memcache共享
4.文件方式保存session时,可以采用php的扩展eaccelerator来存储sesion,参考
eaccelerator 应用之“使用共享内存存储Session”

php 5.3 安装magento方法

错误信息:lib\Varien\Object.php on line 488
解决方法:
没有整个代码,而是试图在文件修改/lib/Varien/Object.php在线〜484
public function ___toString (array $arrAttributes = array(), $valueSeparator = ‘,’ )
To this (change ___toString to __invoke为此(改变___toString至__invoke
public function __invoke (array $arrAttributes = array(), $valueSeparator = ‘,’ )
And in file /app/code/core/Mage/Core/Controller/Request/Http.php on line 274
$host = split ( ‘:’ , $_SERVER[ 'HTTP_HOST' ] );
to
$host = explode ( ‘:’ , $_SERVER[ 'HTTP_HOST' ] );

zend framwork Quickstart 配置

最近在研究zend framework 整理一些小东西发表上去希望对大家有用。针对里面出现的:An error occurred 等问题进行下配置。

下载下来之后在你的apache配置文件里面加上这么一段:

<VirtualHost *:80>
ServerAdmin matthew@zend.com
DocumentRoot <PATH_TO_QUICKSTART>/public
ServerName quickstart
<Directory <PATH_TO_QUICKSTART>/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
PATH_TO_QUICKSTART 即你的 Quickstart 存放目录。
接下来将apache里面的重写打开。

然后在主机头里面添加 quickstart 具体路径:C:\WINDOWS\system32\drivers\etc下的host文件用文本方式打开。在localhost后面添加 quickstart

找到php.ini 配置文件将里面的 【extension=php_pdo_sqlite.dll 】【extension=php_sqlite.dll】前面的’;’去掉。
再用 http://quickstart/guestbook/ 访问试试。

firefox与ie 的javascript区别

改用 [] 作为下标运算。如:document.forms(“formName”) 改为 document.forms["formName"]。
又如:document.getElementsByName(“inputName”)(1) 改为 document.getElementsByName(“inputName”)[1]
window.event
现有问题:
使用 window.event 无法在 firefox上运行
解决方法:
MF的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通:
原代码(可在IE中运行):
<input type=“button“ name=“someButton“ value=“提交“ onclick=“javascript:gotoSubmit()“/>

<script language=“javascript“>
function gotoSubmit() {

alert(window.event); // use window.event

}
</script>
新代码(可在IE和MF中运行):
<input type=“button“ name=“someButton“ value=“提交“ onclick=“javascript:gotoSubmit(event)“/>

<script language=“javascript“>
function gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);

alert(evt); // use evt

}
</script>
此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。
HTML 对象的 id 作为对象名的问题
现有问题:
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 firefox 中不能。
解决方法:
用 getElementById(“idName”) 代替 idName 作为对象变量使用。
用idName字符串取得对象的问题
现有问题:
在IE中,利用 eval(idName) 可以取得 More >

VMware 无法安装 解决办法

VMware不可以安装在已经安装有VMware产品的windows主机上,VMware是否已经安装在一台Windows主机上,是根据注册表的一些键值来判断的。当卸载VMware的时候,这些键值没有被删除,于是在下次安装VMware的时候,就会出现问题。
解决办法(一):
1.以本地管理员帐户登陆你的主机
2.关闭主机上的所有的防火墙软件,一些防火墙软件会干涉安装的进程
3.利用Windows的“添加删除软件”功能删除VMware,如果VMware在添加删除程序的列表中
4.运行VMware注册表清理脚本,如果卸载不成功,则可以运行VMware_Install_Cleaner.exe也就是我们常说的反安装 软件。这个脚本可以清除 Workstation 3.1, Workstation 3.2, Workstation 4.x, Workstation 5.x, GSX Server 2.x, GSX Server 3.0, GSX Server 3.1, ACE Manager 1.0, ACE 1.0, VmPerl 2.0, VmPerl 3.0, VmCOM 2.0, and VmCOM 3.0安装的时候,写入Windows的注册表键值。 如果你的VMware Workstation 的版本是5系列,则只需在命令行下输入VMware-workstation-<version>.exe /c ,就可以清除由MSI安装包写入注册表的键值。注意:在命令行中要把你的当前目录设置到VMware- workstation-<version>.exe文件所在目录,如果使用这个命令不起作用,则再使用 VMware_Install_Cleaner.exe
下载地址:下载
5.重新启动计算机
当你操作完第4点或者成功安装了VMware的时候请重新启动计算机。
6.使用Microsoft CleanUp utility
具体使用方法support.microsoft.com/default.aspx?scid=kb;en-us;290301.
解决办法(二):手动清除注册表
对注册表进行操作可能会导致系统无法正常启动,请在修改注册表之前备份注册表
1.以管理员的身份登陆本地计算机
2.停止以下服务
VMware Authentication Service
VMware Registration Service
VMware DHCP Service
VMware NAT Service
3.卸载VMware network bridge
开始>设置> 网络连接>右键任何网络适配器>属性
选择VMware Bridge Protocol More >

zend studio for eclipse 6.0 一些配置

最近整理了一下zend studio for eclipse 的一些常用的配置如下:
【已备后用】

window ->preferences->general->workspace,看到右边的text file encoding。设定zend 的初始编码。
window ->preferences->php->templates->New simple PHP file。进行设定自己的一些署名信息及代码介绍等等。
缩进方法 [向右] tab [向右]shift+tab