php编写大型网站问题集

 更新时间:2016年11月25日 17:41  点击:2111

  PHP以其易用性得到迅速的推广,但易用并不是说就能用好它,实际上许多程序员用它很容易的立一个个WEB应用系统,但又有多少人仔细的考虑过他们的代码,是否容易维护、是否足够健壮、否效率足够高、是否足够安全,当PHP用于建立大型网站时这些就成为很关键的因素。下面我们从较轻微的问题开始讨论,直至一些致命的错误。共分三部分。
  第一部分、较轻微的错误
   
  一、Printf(),
    该函数主要用来格式化显示数据。当你要改变某个数据的显示格式时才使用。
  例如以不同的精度来显示PI(3.1415926)的值。
复制PHP内容到剪贴板
PHP代码:

<?php 
   /* 
   * The three faces of Π 
   */ 
   
   printf ("Pi is: %.2fn<br>n", M_PI); 
   printf ("Pi is also: %.3fn<br>n", M_PI); 
   printf ("Pi is also: %.4fn<br>n", M_PI); 
  ?>


  但许多程序员仅仅为显示一些变量值和函数返回值使用该函数。因为Printf()在显示数据前要先格式化该数据以速度较慢,因此,仅为了显示数据时应用print和echo,以提高速度。
   
  二、语意检查
    PHP是一种弱类型语言,也就是说在使用一个变量前不用定义,这样给编程带来了很大的方便和灵活,但你自己必须知道该变量到底应该是哪种类型,因为该变量在运行时仍实际对应着某一种类型(各种类型之间可以自由互相转换),没有类型的变量是不存在的。有可能PHP并不能检查出你的语意错误,但由于变量类型的变化,会导致一些潜在的问题的发生。另外一个值得注意的问题是变量的范围,它也可能会导致一些潜在的问题的发生。
  在PHP中有以下几种基本变量:
  Boolean, resource, integer, double, string, array and object。
   
  三、临时变量的使用
    临时变量的滥用会导致程序运行效率的降低。何时使用临时变量可基于以下两点考虑:
  1、该变量是否至少使用两次。
  2、该变量的使用是否会显著提高程序的可读性。
  如果一条也不满足,则省略该变量的使用。例如:
复制PHP内容到剪贴板
PHP代码:

<?php 
   $tmp = date ("F d, h:i a"); /* ie January 3, 2:30 pm */ 
   print $tmp; 
  ?>


就应该改成:
复制PHP内容到剪贴板
PHP代码:

<?php 
   print date ("F d, h:i a"); 
  ?>


又如:
复制PHP内容到剪贴板
PHP代码:

<?php 
   
  // string reverse_characters(string str) 
  // Reverse all of the characters in a string. 
  function reverse_characters ($str) 
  { 
   return implode ("", array_reverse (preg_split("//", $str))); 
  } 
   
  ?>


的可读性不强,可改成:
复制PHP内容到剪贴板
PHP代码:

<?php 
   
  // string reverse_characters(string str) 
  // Reverse all of the characters in a string. 
  function reverse_characters ($str) 
  { 
   $characters = preg_split ("//", $str); 
   $characters = array_reverse ($characters); 
   
   return implode ("", $characters); 
  } 
   
  ?>


四、客户端和服务器端代码的分离
    客户端和服务器端代码的在PHP程序中实际上就是HTML代码和PHP语言代码,很多人把HTML和PHP语句混合在一个文件里,使得这文件很大,这种风格对程序的维护和再开发很不利,不适合大型站点的开发。一般有两种方法把HTML和PHP语句分开:
  1、编写专用API,例如:
   
  index.php ? The Client side
复制PHP内容到剪贴板
PHP代码:

<?php include_once ("site.lib"); ?> 
  <html> 
  <head> 
  <title> <?php print_header (); ?> </title> 
  </head> 
  <body> 
  <h1> <?php print_header (); ?> </h1> 
  <table border="0" cellpadding="0" cellspacing="0"> 
  <tr> 
  <td width="25%"> 
  <?php print_links (); ?> 
  </td> 
  <td> 
  <?php print_body (); ?> 
  </td> 
  </tr> 
  </table> 
  </body> 
  </html>

site.lib ? The server side code
复制PHP内容到剪贴板
PHP代码:

<?php 
   
  $dbh = mysql_connect ("localhost", "sh", "pass") 
  or die (sprintf ("Cannot connect to MySQL [%s]: %s", 
  mysql_errno (), mysql_error ())); 
  @mysql_select_db ("MainSite") 
  or die (sprintf ("Cannot select database [%s]: %s", 
  mysql_errno (), mysql_error ())); 
   
  $sth = @mysql_query ("SELECT * FROM site", $dbh) 
  or die (sprintf ("Cannot execute query [%s]: %s", 
  mysql_errno (), mysql_error ())); 
   
  $site_info = mysql_fetch_object ($sth); 
   
  function print_header () 
  { 
   global $site_info; 
   print $site_info->header; 
  } 
   
  function print_body () 
  { 
   global $site_info; 
   print nl2br ($site_info->body); 
  } 
   
  function print_links () 
  { 
   global $site_info; 
   
   $links = explode ("n", $site_info->links); 
   $names = explode ("n", $site_info->link_names); 
   
  for ($i = 0; $i < count ($links); $i++) 
  { 
   print "ttt 
   <a href="$links[$i]">$names[$i]</a> 
   n<br>n"; 
  } 
  } 
  ?>


这种方法使得程序看起来比较简洁,而且执行速度也较快。
   
  2、使用模板的方法
  这种方法使得程序看起来更简洁,同样实现上面的功能,可用以下代码:
复制内容到剪贴板


<html>
  <head>
  <title>%%PAGE_TITLE%%</title>
  </head>
  <body %%BODY_PROPERTIES%%>
  <h1>%%PAGE_TITLE%%</h1>
  <table border="0" cellpadding="0" cellspacing="0">
  <tr>
  <td width="25%">%%PAGE_LINKS%%</td>
  <td>%%PAGE_CONTENT%%</td>
  </tr>
  </table>
  </body>
  </html>
   
  用占位符代替要动态生成的内容,然后用一解析程序分析该模板文件,把占位符用际的内容替换。种方法使得即使不会使用PHP的页面制作人员也能修改模板文件。这种方法的缺点是执行效率不高,因为要解释模板文件。同时实现起来也比较复杂。
   
  注: www.thewebmasters.net的 FastTemplate class可方便的实现以上功能。
   
  五、不要用过时的函数
  作为一种自由软件,PHP发展很快,其中的很多函数都已过时,例如:
   
  while (1):
  print "5";
  if ($idx++ == 5):
  break;
  endif;
  endwhile;
   
    虽然还能用但效率肯定不高,而且可能在以后的版本中会禁用,导致程序不能运行。因此要经常对照最新PHP手册检查那些函数已过时及时修正。

KindEditor编辑器调用方法,这个编辑器可使用到任何语言中,他是一个纯js的编辑器,但它默认的编辑是utf-8如果是gb2312编辑的朋友就是KindEditor.js打开,重保存为gb2312就可以使用在gb2312文档中了,否则就是出现乱码.

下面为说说kindeditor的调用方法吧,我们在先在需要使用该编辑中的文档中调用KindEditor.js,好了我们举个例子说明:

<script type="text/javascript" src="KindEditor.js"></script>/这个在文档的头部了,

<div style="font-size:12px;margin-bottom:5px;margin-left:5px;"> </div>
            <input type="hidden" name="content" >
     
            <script type="text/javascript">
    var editor = new KindEditor("editor");
    editor.hidenName = "content";
    editor.skinPath = "./skins/tiny/";//设置皮肤的路径
    editor.iconPath = "./icons/";//图片
    editor.imageAttachPath = "./attached/";//

    editor.imageUploadCgi = "upload_cgi/upload.php";
    editor.cssPath = "common.css";
    editor.editorWidth = "99%";
    editor.editorHeight = "270px";
    editor.show();
    function KindSubmit() {
     editor.data();
    }
   </script> 

 

就这么简单了,

 

注明:转载请说明原处www.111cn.net

function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec (float)$sec);
}

$time_start = getmicrotime();//开始计时, 放在程序头

for ($i=0; $i < 1000; $i ){
//do nothing, 1000 times
}

$time_end = getmicrotime();//结束计时, 放在尾部
$time = $time_end - $time_start;

echo "Did nothing in $time seconds";

<html>

<head>
<title></title>
</head>

<body>

<?php
$mysql_server_name='localhost';
$mysql_username='root';
$mysql_password='000000';
$mysql_database='lib';
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_database);
$sql="select name,age from mytb";
print($conn);
$rs=mysql_db_query("lib","select * from mytb",$conn);
print("n<br>");
while($row = mysql_fetch_object($rs)){
print ($row->name.":".$row->age."<br>");
}
mysql_close($conn);
?>

  显示如下:

Resource id #1
dd:54
ddd:8
??:15
???:25
??:32

  mysql编码:utf8,GBK都试过了。mysql font 和命令行显示都正确。

  问题补充:

  乱码:

???:15
???:25
??:32

  这几行,数据库里的值是汉字.显示出来的是问号.

  解决办法:

  在$rs=mysql_db_query("lib","select * from mytb",$conn);

  前面加上

  mysql_query("set names gb2312");或者mysql_query("set names gbk");

文本要害字:程序设计/PHP/技巧

  【1】页面之间无法传递变量

  get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到。
  当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。

  【2】Win32下apache2 用get方法传递中文参数会出错

  test.php?a=你好&b=你也好
  传递参数是会导致一个内部错误
  解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)
  .............

  【3】win32下的session不能正常工作

  php.ini默认的session.save_path = /tmp
  这显然是linux下的配置,win32下php无法读写session文件导致session无法使用
  把它改成一个绝对路径就可以了,例如session.save_path = c:windowstemp

  【4】显示错误信息

  当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,假如你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽
  例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo

  【5】Win32下mail()不能发送电子邮件

  在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件
  修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)
  php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器

  【6】初装的mysql假如没有设置密码,应该使用
 
  update mysql.user set password="yourpassword" where user="root"
  修改密码

  【7】header already sent

  这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!

  【8】更改php.ini后没有变化

  重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置

  【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)

  PHP4的php4isapi.dll似乎和2003有些冲突,只能用CGI模式安装
  步骤一,先www.php.net下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。 安装好以后,在默认网站-->应用程序配置
  步骤二:点击 web服务扩展 -->新建web服务扩展.
  步骤三: 扩展名-->php,然后添加
  步骤四:找到php.exe的路径添加上去。
  步骤五: 确定就可以了!
  步骤六: 选择php的服务扩展,然后点击答应。

  【10】 有时候sql语句不起作用,对数据库操作失败

  最简便的调试方法,echo那句sql,看看变量的值能得到不

  【11】include和require的区别

[!--infotagslink--]

相关文章

  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • Powershell实现编写和运行脚本

    本文为那些对学习 Windows PowerShell 命令行和脚本编写环境感兴趣的系统管理员提供了资源。也请告诉我们本网站如何才能对您更有用处。...2020-06-30
  • PHP传值到不同页面的三种常见方式及php和html之间传值问题

    在项目开发中经常见到不同页面之间传值在web工作中,本篇文章给大家列出了三种常见的方式。接触PHP也有几个月了,本文总结一下这段日子中,在编程过程里常用的3种不同页面传值方法,希望可以给大家参考。有什么意见也希望大...2015-11-24
  • js修改input的type属性问题探讨

    js修改input的type属性有些限制。当input元素还未插入文档流之前,是可以修改它的值的,在ie和ff下都没问题。但如果input已经存在于页面,其type属性在ie下就成了只读属性了,不可以修改。...2013-10-19
  • Mysql常见问题集锦

    1,utf8_bin跟utf8_general_ci的区别 ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SELECT * FROM table WHERE txt = 'a'...2013-10-04
  • Mysql大小写敏感的问题

    一、1 CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的:复制代码 代码如下: SELECT * FROM TABLE NAME WHERE name='clip'; SELECT * FROM TABLE NAME WH...2015-03-15
  • mac下Apache + MySql + PHP搭建网站开发环境

    首先为什不自己分别搭建Apache,PHP和MySql的环境呢?这样自己可以了解更多知识,说起来也更酷。可也许因为我懒吧,我是那种“既然有现成的,用就是了”的人。君子生非异也,善假于物也。两千年前的荀子就教导我们,要善于利用工具...2014-06-07
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • php实现网站留言板功能

    我要实现的就是下图的这种样式,可参考下面这两个网站的留言板,他们的实现原理都是一样的畅言留言板样式:网易跟帖样式:原理 需要在评论表添加两个主要字段 id 和 pid ,其他字段随意添加,比如文章id、回复时间、回复内容、...2015-11-08
  • 网站广告怎么投放最好?首屏广告投放类型优化和广告位布局优化的案例

    网站广告怎么投放最好?一个网站中广告位置最好的是哪几个地方呢,许多的朋友都不知道如何让自己的网站广告收效最好了,今天我们就一起来看看吧。 在说到联盟优化前,...2016-10-10
  • C#使用队列(Queue)解决简单的并发问题

    这篇文章主要介绍了使用队列(Queue)解决简单的并发问题,讲解的很细致,喜欢的朋友们可以了解一下...2020-06-25
  • windows 10 安装和使用中5个常见问题

    2015年7月29日0点起,Windows 10推送全面开启,Windows7、Windows8.1用户可以免费升级到Windows 10,用户也可以通过系统升级到Windows10,在这过程中,用户会遇到这样那样的问题,下面小编总结了windows 10 安装和使用中5个常见问题,需要的朋友可以参考下...2016-01-27
  • 个人站长做网站应该考虑的一些问题

    个人网站建设应该考虑哪些问题呢?这个问题我们先在这里不说,下文会一一列出来,希望这些建义能帮助到各位同学哦。 我相信VIP成员里面有很多站长,每个人几乎都拥有一个...2016-10-10
  • 分享利用论坛签名提升网站权重

    分享一篇利用论坛签名提升网站权重的方法,在推广中论坛签名也是一种不错的外链推荐的方法,但现在权重越来越低了,有需要的朋友可以看看。 话说有一天在站长网上面看...2016-10-10
  • php中session常见问题分析

    PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 引用 代...2016-11-25
  • javascript学习指南之回调问题

    回调函数被认为是一种高级函数,一种被作为参数传递给另一个函数(在这称作"otherFunction")的高级函数,回调函数会在otherFunction内被调用(或执行)。回调函数的本质是一种模式(一种解决常见问题的模式),因此回调函数也被称为回调模式。...2016-04-25
  • 网站排名提升后稳定排名方法

    一、靠前排名成搜索关注的对象   从搜索引擎的角度考虑一下,就不难理解为什么搜索引擎对排名在首页的网站那么慎重,甚至对新进排名在首页的一些网站进行为期一个多月的...2016-10-10
  • 如何有效提高网站的用户回头率

    第一,网站的内容;请各位站长朋友不要一天到晚只想着出什么好的绝招来推广网站,却忽略了网站的内容;其实网站的内容是极为重要的,因为这是你的本,你的根!网站的内容只有不断...2017-07-06
  • 如何提高网站pv 吸引力

    关于如何提高网站的吸引呢,下面我们列出了5点,让你的网站pv大大的提升哦   1、建立一个清晰的网站地图   一个清晰的网站地图可以给你的用户提供一个简介明了的...2017-07-06