最令PHP初学者头痛的十四个问题
2010年07月26日
by 江小邪
0 comments
2010年07月26日
by 江小邪
0 comments
2010年07月26日
by 江小邪
0 comments
Sockets在PHP中是没有充分利用的功能。今天你将看到产生一个能使用客户端连接的服务器,并在客户端使用socket进行连接,服务器端将详细的处理信息发送给客户端。
当你看到完整的socket过程,那么你将会在以后的程序开发中使用它。这个服务器是一个能让你连接的HTTP服务器,客户端是一个Web浏览器,这是一个单一的 客户端/服务器 的关系。 (更多…)
标签Tags:PHP, PHP, php.ini, server, web, 代码, 函数, 区别, 实例, 应用程序, 成功, 操作系统, 数据, 注释, 浏览器, 程序, 类, 系统, 网络编程, 英文, 获取, 解决, 诫, 连接, 错误, 页面
2010年07月26日
by 江小邪
0 comments
不多说了,看代码。自己体会
<?php
echo “濙水河边的PHP演示”;
echo “<br>”;
$db=mysql_connect(“localhost”,”root”,”123456″);
mysql_select_db(“jaycee”,$db);
$rs=mysql_query(“select * from gbook”,$db);
while($row=mysql_fetch_row($rs))
{
echo <<< eod
<table width=”99%” border=”1″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td>$row[0]</td>
<td>$row[1]</td>
</tr>
<tr>
<td>$row[2]</td>
<td>$row[3]</td>
</tr>
</table>
eod;
}
?>
<<<也就是可以让我们在PHP代码内实现一大段的HTML代码,并且可以在其中,使用PHP变量。
淡水河边这厮,找到许多PHP入门呀,php起步呀==的书,从没提到用到这个。郁闷,用不到么?
居然不提。愤怒! (更多…)
标签Tags:html, mysql, PHP, PHP, sql, 代码, 函数, 区别, 常用, 数据, 数据库, 方法, 浏览器, 类, 网络编程, 诫, 连接
2010年07月26日
by 江小邪
0 comments
第一点:require() 和 include() 除了怎样处理失败之外在各方面都完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在丢失文件时停止处理页面,那就用require() 吧,它直接会中止脚本。而include() 就不是这样,脚本会继续运行,但是会抛出一个Notice级别的错误。同时也要确认设置了合适的include_path。
就是说再解析程序时即读取require的文件,而不是解析后,如果不能读取到被require的文件,就不能进行下一步动作。所以,不被正确包含就会导致程序的文件,用require比较好。
第二点:require() 无论如何都会包含文件,而 include() 可以有选择地包含:
<!–p if(FALSE){ require(‘a.php’); } if(FALSE){ include(‘b.php’); } –>
比如上面这段代码,a.php一定会被包含,而b.php一定不会被包含。require类似于一次预扫描,在程序执行时,无论在函数里或是函数外,都将先把require的文件执行,且只执行一次。而include则是每执行一次就调用一次文件,即这次执行后,下次再执行执行到这里,仍将再执行一次。大家应该明白这个区别了吧:)
同时可以看下require_once和include_once的区别。
require_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。
include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。如同此语句名字暗示的那样,只会包括一次。
第一点:require() 和 include() 除了怎样处理失败之外在各方面都完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在丢失文件时停止处理页面,那就用require() 吧,它直接会中止脚本。而include() 就不是这样,脚本会继续运行,但是会抛出一个Notice级别的错误。同时也要确认设置了合适的include_path。
就是说再解析程序时即读取require的文件,而不是解析后,如果不能读取到被require的文件,就不能进行下一步动作。所以,不被正确包含就会导致程序的文件,用require比较好。
第二点:require() 无论如何都会包含文件,而 include() 可以有选择地包含:
<!–p if(FALSE){ require(‘a.php’); } if(FALSE){ include(‘b.php’); } –>
比如上面这段代码,a.php一定会被包含,而b.php一定不会被包含。require类似于一次预扫描,在程序执行时,无论在函数里或是函数外,都将先把require的文件执行,且只执行一次。而include则是每执行一次就调用一次文件,即这次执行后,下次再执行执行到这里,仍将再执行一次。大家应该明白这个区别了吧:)
同时可以看下require_once和include_once的区别。
require_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。
include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。如同此语句名字暗示的那样,只会包括一次。
2010年07月26日
by 江小邪
0 comments
Ajax控件和类库现在真的太多了,不知不觉中增加了Ajax的神秘性和复杂性,看到版内很多人为此费解和伤神,决定发此贴谈谈本人对Ajax的观点,希望能让大家对Ajax有一个本质的认识。
观点一:Ajax和服务器端技术毫不相关
严格的说,与传统web开发相比,Ajax是完完全全的客户端技术。由于很多控件封装了客户端和服务器端的通信过程,因此很多问题也因通信而起。事实上,不论何种Ajax技术,服务器端都是返回的一个纯文本流,再由客户端来处理这个文本。这段文本可以是xml格式,也可以是一个Html片段,也可以是一段JavaScript脚本,或者仅是一个字符串。服务器端仅仅是作为一个数据接口,客户端使用XMLHttpRequest对象来请求这个页面,服务器端在页面内写入结果文本,这个过程和普通的web开发没有任何区别。所不同的只是,客户端在异步获取结果后,不是直接显示在页面,而是由客户端的Javascript脚本处理后再显示在页面。至于各种控件所谓的能返回DataSet对象,Date对象,或者其他的数据类型,都是封装了这个处理过程的结果。
观点二:DOM模型是Ajax最本质的技术
之所以没有把XMLHttpRequest列为最本质的技术,因为本人觉得它实在是太简单了,它只是可以让浏览器在后台请求一个页面,并将其内容交给JavaScript处理。真正的核心应该是:DOM模型,即文档对象模型。在DOM模型里,Html标记都被认为是一个对象,例如:div对象,table对象等等。DOM模型就规定了这些对象所具有的属性、方法和事件。通过这些性质,可以对一个已经显示于浏览器的页面进行内容的修改,例如增加节点、修改节点位置,删除节点等等。而不仅仅是一个innerHTML属性这么简单,虽然这是一个很有用的属性。
观点三:在使用Ajax控件前理解它们的实现
使用Ajax控件的确可以提高效率,但如果你空中楼阁般使用控件,那就得不偿失了。从一个控件换到另外一个控件又会有一个漫长的学习曲线。所以应该从底层了解其,况且Ajax实在不是什么高深的技术。其实任何东西的最底层其实都是简单的,但如果封装了这些底层的东西,事情会变得复杂和难以理解。以Asp.net为例,它的定制特性可以使得只要在方法前加上[ajax method]类似这样的标志就可以称为一个异步方法,相信这使得Asp.net的Ajax开发显得更加“高效”或者是“神秘”,而更多的事情则被封装了。同样记住一条,任何对服务器端的请求仅仅是返回纯文本,我们不一定要依赖于封装好的处理过程,而完全可以自己来实现。
观点四:学好JavaScript
在大多数人看来,JavaScript总不是那么一种正规的语言,随便copy一段就碰巧能运行,学过c之类的人,一看也能看懂,而且在浏览器中常常有脚本错误提示,所以潜意识觉得总不能付之以大任。事实上,要学好Ajax,这就完全是一种错误的看法。javascript作为一种脚本语言,其语法的确不是很严格,但并不妨碍其完成诸多复杂的任务,没有JavaScript,就没有Ajax。所以本人强烈建议,学Ajax前,一定要好好研究一番JavaScript,一般来讲,如果能顺利看懂prototype框架的代码(如:prototype-1.3.1.js),你的JavaScript水平就基本过关了。同时对DOM模型也可以算有一个基本的了解。
观点五:Ajax点缀:CSS
用JavaScript控制CSS其实很简单,基本上每个DOM对象都有一个style对象,只要把css属性里的”-”去掉,并让随后的字母变为大写就可以作为属性使用了,例如:element.style.backgroundColor=”#f00″;在css是:选择符 {background-color:#f00}
一口气说这么多,希望对大家有点用处。
标签Tags:ajax, ASP, asp.net, css, div, html, javascript, JavaScript&Ajax, js, web, xml, xmlhttp, 人, 代码, 区别, 对象, 属性, 接口, 数据, 方法, 浏览器, 类, 网络编程, 节点, 获取, 错误, 页面
2010年07月26日
by 江小邪
0 comments
Ajax技术的实现主要依赖于xmlhttprequest,但我们在调用其来进行异步数据的传输时,由于xmlhttp是个短线过程(处理事件完成后就销毁)如果不对该对象进行包装处理的话,就不得不在需要调用的地方重新构建xmlhttprequest,每次调用都要写一大段的代码,实在不是个好办法。好在现在很多开源的ajax框架都提供了对xmlhttp封装的方案。这里以ajaxtags自带的prototype-1.4.0.js为母版,来看看如何将xmlhttp对象封装成一个可复用的方法。
在prototype.js中,首先定义了一个变量:Ajax
var Ajax = {
getTransport: function() {
return Try.these(
function() {return new ActiveXObject(‘Msxml2.XMLHTTP’)},
function() {return new ActiveXObject(‘Microsoft.XMLHTTP’)},
function() {return new XMLHttpRequest()}
) || false;
},
activeRequestCount: 0
}
变量返回了一个xmlhttprequest,可以看到,如果我们调用了Ajax.getTransport(),每次都会返回一个新的xmlhttprequest对象。
(更多…)
2010年05月23日
by 江小邪
2 comments
eAccelerator和memcache,是目前较为主流的两个可使用在PHP之中的缓存加速工具.
eAccelerator专门为PHP开发,而memcache不仅仅用在PHP之中,其他所有的语言都可以使用.
eAccelerator的主要功能:
1. 缓存PHP文件的执行代码:在被缓存的代码再次被调用时,将直接从内存读取,从而在很大程度了PHP运行的速度.
2. 提供了共享内存操作函数:用户可以将自己的常见非资源对像,保存到内存之中,并可以随时读取出来.
memcache的主要功能:
提供共享内存操作函数,可以保存和读取数据
两者的共同点:
共同点:都提供了共享内存操作函数,可以用来保存和读取自己的数据
两者的区别:
eAccelerator作为PHP的扩展库存在,那么仅在PHP运行时,可以操作和读写共享内存,一般情况,只能由操作共享内存的程序自己调用.
同时,eAccelerator可以缓存PHP程序的执行代码,提升程序的调入和执行速度.
memcache主要作为一个共享内存服务器,其PHP扩展库仅仅作为PHP到memcache的连接库存在,类似MySQL扩展库.因而,memcache可以完全脱离PHP,其共享的数据,可以被不同的程序调用.
根据两者的不同,我们将他们使用在真真需要的地方:
eAccelerator主要用于单机PHP提速,缓存中间数据.对于实时性高,但数据操作量小的情况下,非常实用.
memcache用于分布式或者集群系统,多台服务器可以共享数据.对于实时性高,同时数据操作量大的情况下,非常实用.
2010年05月23日
by 江小邪
0 comments
/usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
memcached 的服务正式启动
Memcache::add — 添加一个值,如果已经存在,则返回false
Memcache::addServer — 添加一个可供使用的服务器地址
Memcache::close — 关闭一个Memcache对象
Memcache::connect — 创建一个Memcache对象
memcache_debug — 控制调试功能
Memcache::decrement — 对保存的某个key中的值进行减法操作
Memcache::delete — 删除一个key值
Memcache::flush — 清除所有缓存的数据
Memcache::get — 获取一个key值
Memcache::getExtendedStats — 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus — 获取运行服务器的参数
Memcache::getStats — 返回服务器的一些运行统计信息
Memcache::getVersion — 返回运行的Memcache的版本信息
Memcache::increment — 对保存的某个key中的值进行加法操作
Memcache::pconnect — 创建一个Memcache的持久连接对象
Memcache::replace — R对一个已有的key进行覆写操作
Memcache::set — 添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold — 对大于某一大小的数据进行压缩
Memcache::setServerParams — 在运行时修改服务器的参数 (更多…)
2010年05月23日
by 江小邪
2 comments
2006年12月27日
by 江小邪
0 comments
单引号'和双引号"的区别:
首先是单引号要比双引号执行效率要高,因为双引号会对内容进行预处理。
例如:'$value' 输出字符 $value ; "$value"输出变量$value的值。
char和varchar的区别:
char是定长而varchar是变长,char的主要特点是存储方式预分配,varchar当它的数据长度发生变化时会影响其存储的页分配。
char与varchar2是一对矛盾的统一体,两者是互补的关系. varchar2比char节省空间,在效率上比 char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率'。varchar2 虽然比 char节省空间,但是如果一个varchar2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移'(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用 char代替varchar2会更好一些。 (更多…)