令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:\windows\temp
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下在一个安装程
10、有时候sql语句不起作用,对数据库操作失败
最简便的调试方法,echo那句sql,看看变量的值能得到不。
11、include和require的区别
两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出,据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许*nux下情况不同,暂时还没测试
如果一个文件不想被包含多次可以使用include_once或require_once## 读取,写入文档数据:


代码如下:

function r($file_name) {
$filenum=@fopen($file_name,"r");
@flock($filenum,LOCK_SH);
$file_data=@fread($filenum,filesize($file_name));
@fclose($filenum);
return $file_data;
}
function w($file_name,$data,$method="w"){
$filenum=@fopen($file_name,$method);
flock($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}

12、isset()和empty()的区别
两者都是测试变量用的。
但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示。如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。
要注销一个变量,可以用 unset($foo)或者$foo=NULL。
13、mysql查询语句包含有关键字
php查询mysql的时候,有时候mysql表名或者列名会有关键字。这时候查询会有错误。例如表名是order,查询时候会出错。简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,
例如select * from `order` 。
14、通过HTTP协议一次上传多个文件的方法
有两个思路,是同一个方法的两种实现。具体程序还需自己去设计:
1、在form中设置多个文件输入框,用数组命名他们的名字,如下:
<form action="" method=post>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
</form>
这样,在服务器端做以下测试
echo "<pre>";
print_r($_FILES);
echo "</pre>";
2、在form中设置多个文件输入框,但名字不同,如下:
<form action="" method=post>
<input type=file name=usefile_a>
<input type=file name=usefile_b>
<input type=file name=usefile_c>
</form>
在服务器端做同样测试:
echo "<pre>";
print_r($_FILES);
echo "</pre>";
序,
我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。 安装好以后,在默认网站-->应用程序配置;
步骤二:点击 web服务扩展 -->新建web服务扩展;
步骤三: 扩展名-->php,然后添加;
步骤四:找到php.exe的路径添加上去;
步骤五: 确定就可以了;
步骤六: 选择php的服务扩展,然后点击允许。

(0)

相关推荐

  • 令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=你也好 传递参数是会导致一个

  • [JAVA]十四种Java开发工具点评

    在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美的,就算是老鸟也很难做出选择.在本文中我简要介绍了常见的十四种Java开发工具的特点,管中窥"器",希望能对大家有所帮助. 1.JDK (Java Development Kit) 2.Java Workshop 3.NetBeans 与Sun Java Studio 5 4.Borlan

  • MySQL系列之十四 MySQL的高可用实现

    一.MHA ​对主节点进行监控,可实现自动故障转移至其它从节点:通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库. 1.MHA工作原理 从宕机崩溃的master保存二进制日志事件(binlog events) 识别含有最新更新的slave 应用差异的中继日志(relay log)到其他的slave 应用从

  • 三十四、 WIN2000注册表应用九例

    三十四. WIN2000注册表应用九例 我们知道,与Windows 9x操作系统相似,在Windows 2000中,配置信息也是集中存储在注册表这个数据库里,但比较不同的是在Windows 9x中用来修改注册表文件的注册表编辑器是regedit.exe,而在Windows 2000中,要修改Registry数据库你可以使用两种"注册表编辑器"来进行编辑:一个是regedit.exe,而另一个则是regedt32.exe.前者可以在Windows 2000的安装目录\WINNT下找到,后

  • jQuery 1.9.1源码分析系列(十四)之常用jQuery工具

    为了给下一章分析动画处理做准备,先来看一下一些工具.其中队列工具在动画处理中被经常使用. jQuery.fn. queue(([ queueName ] [, newQueue ]) || ([ queueName ,] callback ))(获取或设置当前匹配元素上待执行的函数队列. 如果当前jQuery对象匹配多个元素:获取队列时,只获取第一个匹配元素上的队列:设置队列(替换队列.追加函数)时,则为每个匹配元素都分别进行设置.如果需要移除并执行队列中的第一个函数,请使用dequeue()函

  • 五十四、如何使NT4.0支持你的调制解调器

    五十四.如何使NT4.0支持你的调制解调器  ---- 目前越来越多的人们使用Windows NT4.0 作为局域网的操作系统,同时通过Modem(调制解调器),连接入INTERNET,虽然大多数人使用的Modem是Windows NT4.0识别或兼容的,但仍有部分Modem是Windows NT4.0所不能识别的,本文将介绍如何通过修改Windows NT4.0配置文件使其支持你所用的Modem. ---- Windows NT4.0调制解调器的设置方式使用的是 Telephone Appli

  • 六十四、WINOWS NT4.0下的网络安全性

    六十四.WINOWS NT4.0下的网络安全性  热点网络 在网络多用户环境下,系统的安全性.权限设置非常重要,Windows NT 4.0提供了网络环境下的一个成功的安全保密系统.Windows NT从最初开发到目前使用广泛的Windows NT 4.0,其安全系统已日趋成熟.完备,但同时也使得系统的管理人员在构造网络环境.进行权限分配时,感到复杂.难以掌握.笔者查阅了众多的有关资料,又经过反复实践,在此作一简要的分析和介绍. Windows NT 4.0的网络安全性依赖于给用户或组授予的三种

  • 利用注册表限制特定程序运行—注册表使用全攻略之十四

    利用注册表限制特定程序运行-注册表使用全攻略之十四 对于一些与系统密切相关的程序,如果随意让其他人使用,非常容易造成死机甚至系统崩溃.通过系统本身的注册表来限制特定程序的运行. 1.一键锁通关 我们要做的是在注册表中加入"RestrictRun"键值,以此来限制绝大多数程序的运行 . 运行"Regedit"打开注册表编辑器,展开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\E

  • 第十四节--命名空间

    /* +-------------------------------------------------------------------------------+ | = 本文为Haohappy读<<Core PHP Programming>>  | = 中Classes and Objects一章的笔记  | = 翻译为主+个人心得  | = 为避免可能发生的不必要的麻烦请勿转载,谢谢  | = 欢迎批评指正,希望和所有PHP爱好者共同进步!  | = PHP5研究中心: 

  • SQL数据库十四种案例介绍

    数据表 /* Navicat SQLite Data Transfer Source Server : school Source Server Version : 30808 Source Host : :0 Target Server Type : SQLite Target Server Version : 30808 File Encoding : 65001 Date: 2021-12-23 16:06:04 */ PRAGMA foreign_keys = OFF; -- -----

随机推荐