首页 > 编程技术 > php

php的优缺点

发布时间:2016-11-25 16:09




PHP的优点:

  1. 跨平台,性能优越,跟Linux/Unix结合别跟Windows结合性能强45%,并且和很多免费的平台结合非常省钱,比如LAMP(Linux/Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)结合,或者数据应用够大可以考虑换PostgreSQL或者Oracle,支持N种数据库。(N >= 10)

  2. 语法简单,如果有学习C和Perl的很容易上手,并且跟ASP有部分类似。有成熟的开发工具,比如NuPHPed,或者Zend Studio等等,再Linux平台下可以使用Eclipse等等。

  3. 目前主流技术都支持,比如WebService、Ajax、XML等等,足够应用。

  4. 有比较完整的支持,比如使用ADODB或者PEAR::DB做数据库抽象层,用Smarty或者smart template做模板层,如果是PHP 5.1的话,还能够使用PDO(PHP Data Object)来访问数据库。

  5. 有很多成熟的框架,比如支持MVC的框架:phpMVC,支持类似ASP.net的事件驱动的框架:Prado,支持类似Ruby On Rails的快速开发的框架:Cake等等,足够满足你的应用需求。

  6. PHP 5已经有成熟的面向对象体系,能够适应基本的面向对象要求。适合开发大型项目。

  7. 有成熟的社区来支持PHP的开发,比如国内的CSDN,喜悦国际村等等。

  8. 目前已经很多大型应用都是使用PHP,比如淘宝网、Yahoo、163、Sina等等大型门户,很多选用PHP来作为他们的开发语言,所以大型门户都能够选用它,我想足够能够你的使用了。

  PHP的缺点:

  1. 代码重用率有待提高,当然,这个跟面向对象有关系。其实PHP 5已经比较适意了。

  2. PHP程序员较少 (这个算php的缺点嘛,呵呵~)

<

近日对PHP产生了浓厚的兴趣,遂决定学习一下。首先是安装。

第一步,安装Apache

        从apache下载Apache2.2安装包,安装,运行,浏览器输入地址127.0.0.1:8080,出现“It Works!”,安装成功。

第二步,安装PHP5

         从cn2.php.net下载windows安装包,运行安装,看到选择扩展的界面,想当然的全部选择,安装OK。再运行Apache,报错,缺少DLL,不能启动PHP。看来扩展不是随便选择的,再次运行安装程序,取消所有扩展,再次运行Apache,OK。写一个页面,加入<?php phpinfo(); ?>,浏览器打开,It‘s OK。

        安装phpmyadmin吧,google了一个安装包下载,解压到apache htdocs目录,运行,提示没有安装MySQL扩展,Easy,再度运行安装程序,修改安装选项,加上MySQL扩展,然后再度运行phpmyadmin,还是提示没有MySQL扩展。嗯,没有任何事情是简单的。

        查看PHP文档,说最好的安装方式是手动安装,怀疑是安装包的问题,卸载,下载PHP手动安装包,解压,按照文档说明,在httpd.conf中加入
                         # 配置 php.ini 的路径
                         PHPIniDir "C:/php5/"

                         # 对 PHP 5 用这两行:
                         LoadModule php5_module "c:/php5/php5apache2_2.dll"
                         AddType application/x-httpd-php .php
,然后复制php.ini-dist为php.ini,去掉GD2,MySQL扩展前面的分号,启动apache,运行phpmyadmin,还是提示没有MySQL扩展。仔细检查安装过程,C:/PHP5加到了环境变量Path中,php.ini中extension_path也更改了,httpd.conf中也加入了PHPIniDir,C:/PHP5/中也确实存在libmysql.dll文件,完全符合文档的描述,也没有什么疏漏,就是找不到。崩溃ing

        参绕了好几天,google无数次,也没有搞定,后来病急乱投医,将libmysql.dll拷贝到Windowssystem32下面,MySQL扩展安装成功。晕倒,文档中说不建议拷贝php5ts.dll 到系统目录,将PHP目录加到PATH 环境变量就可以找到DLL,看来只是能找到php5ts.dll,找不到扩展所需的DLL?

三、搭建开发环境

        我的首选当然是Eclipse了,下载PDT,代码提示、自动完成没什么问题,试一试Debug能力吧,打开Eclipse的帮助,找到PDT Debug一节,按照帮助提示试了试调试功能,

最近研究php多线程的问题,发现中文资源少的可怜,仅有的几篇文章被转了又转,但文中内容价值有限。搜索过程中发现国外很多网站引用的一篇文章写的不错,所以翻译过来。

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
问题:
假设你正在写一个基于多台服务器的php应用,理想的情况时同时向多台服务器发送请求,而不是一台接一台。
可以实现吗?
回答:

当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。

其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到比用fork或thread更好的性能。

假设你要建立一个服务来检查正在运行的n台服务器,以确定他们还在正常运转。你可能会写下面这样的代码:

<?php
$hosts = array("host1.sample.com", "host2.sample.com", "host3.sample.com");
$timeout = 15;
$status = array();
foreach ($hosts as $host) {
    $errno = 0;
    $errstr = "";
    $s = fsockopen($host, 80, $errno, $errstr, $timeout);
    if ($s) {
        $status[$host] = "Connectedn";
        fwrite($s, "HEAD / HTTP/1.0rnHost: $hostrnrn");
        do {
            $data = fread($s, 8192);
            if (strlen($data) == 0) {
            break;
            }
            $status[$host] .= $data;
        } while (true);
        fclose($s);
    } else {
        $status[$host] = "Connection failed: $errno $errstrn";
    }
}
print_r($status);
?>

它运行的很好,但是在fsockopen()分析完hostname并且建立一个成功的连接(或者延时$timeout秒)之前,扩充这段代码来管理大量服务器将耗费很长时间。
因此我们必须放弃这段代码;我们可以建立异步连接-不需要等待fsockopen返回连接状态。PHP仍然需要解析hostname(所以直接使用ip更加明智),不过将在打开一个连接之后立刻返回,继而我们就可以连接下一台服务器。
有两种方法可以实现;PHP5中可以使用新增的stream_socket_client()函数直接替换掉fsocketopen()。




  最近遇到要使用PHP访问WebService。问了一下PHP程序员,用过的人少。自己配置。
  在XP上配置不成功,在Win2003上安装一个5.2,安装时记得选择支持Soap。安装完后把IIS里解释PHP的DLL路径改正确。
  把PHP.ini文件拷贝到Windows目录下,把Soap的Dll文件php_soap.dll拷贝到System32目录下。重启IIS。新建一个PHP文件。
1/* soap.php */
2/* 连接的是C#实现的Webservice */
3$client = new SoapClient( http://xx.xxx.xx.com/service.asmx?wsdl );
4$client->YourFunctionName(
5array(
6  "Parameter1"=>"Value1",
7  "Parameter2"=>"Value2") );
8print $client->YourFunctionNameResult;
9
  这样就得到结果了。
  SoapClient语法详见php.net。用它也可以建立PHP的WebService。
本文来自: 中国自学编程网(www.zxbc.cn) 详细出处参考:http://www.zxbc.cn/html/phpjq/1212264662844.html
 




啊哈,终于用PHP实现了登录和注册拉,但是问题又来了,要求用ajax和php结合实现登录注册油烟机清洗
php登录源码:
下面是chklogin.php页面代码:
<?php
session_start();
$connect=mysql_connect("127.0.0.1","root","123");
if(!$connect)
{
die(''Could not connect: '' . mysql_error());
}
mysql_select_db(design,$connect);
$query="select * from ta_user where user_name =''".$name."''";
$result=mysql_query($query) OR die("Unable to connect to MySQL");
$rows=mysql_fetch_array($result);
if($rows[user_password]==$pwd)
{

header("Location:login_suss.php?name=".$name."");
}
else
{
echo "<table width=''235'' height=''61'' border=''0'' align=''center''>";
echo "<tr><td height=''29''>用户名或密码错误!</td></tr>";
echo "<tr><td height=''29''>请点击<a href=''javascrīpt:history.go(-1);''>这儿</a>重新输入!";
echo "</td></tr>";
echo "</table>";

}
?>

ajax:

<scrīpt language="javascrīpt">
function getXMLHTTPRequest()
{
var xRequest=null;
if (window.XMLHttpRequest)
{
xRequest=new XMLHttpRequest();
}
else if (typeof ActiveXObject != "undefined")
{
xRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
return xRequest;
}
function Ajax(url)
{
AjaxObj = getXMLHTTPRequest();
AjaxObj.onreadystatechange = processRequest;
AjaxObj.open("post",url,true);
AjaxObj.setRequestHeader(''Content-type'',''application/x-www-form-urlencoded'');
AjaxObj.send("name"+name);

}
function processRequest()
{

if(AjaxObj.readyState == 4)
{
if(AjaxObj.status == 200)
{
if(AjaxObj.responseText != "")
{
document.getElementById("show").innerHTML="";
//alert(AjaxObj.responseText);

document.getElementById("show").innerHTML=AjaxObj.responseText;

}
}
else
{
alert("您所请求的页面有异常。
<
标签:[!--infotagslink--]