【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服务器而不用转发服务器

www.phpe.net有个很好的class,不过需要修改一下发信会暴快,修改后版本将在近日推出

【6】header already sent这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:

1,你在使用HEADER前PRING或者ECHO了

2.你当前文件前面有空行

3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!

还有使用session_register()

【7】初装的mysql如果没有设置密码,应该使用

update mysql.user set password=password("yourpassword") where user="root"

【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】

<?php
// 自 PHP 3 起可用
print $HTTP_POST_VARS['username'];
// 自 PHP 4.1.0 起可用
print $_POST['username'];
print $_REQUEST['username'];
import_request_variables('p', 'p_');
print $p_username;
// 如果PHP指令 register_globals = on 时可用。不过自PHP 4.2.0 起默认值为 register_globals = off不提倡使用此种方法。
print $username;
?>

使用 GET 表单也类似,只不过要用适当的 GET 预定义变量。GET 也适用于 QUERY_STRING(URL 中在“?”之后的信息)。因此,举例说,网页链接 包含有可用 $_GET['id'] 访问的 GET 数据。参见 $_REQUEST 和 import_request_variables()。

在 PHP 4.2.0 之前 register_globals 的默认值是 on。在 PHP 3 中其值总是 on。鼓励大家不要依赖此指令,建议在编码时假定其为 off。

【12】暂存你的变量到临时文件:

if(file_exists('temp.php'))
{
$x=r('temp.php');
@eval("\$a = $x;");
}
if(!is_array($a)){
#重新构造数组A
$a=array(array("af"=>"fsdf"),"f"=>"df");
}
w('temp.php',var_export($a,true));
var_dump($a);
读取,写入文档数据
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;
}

【13】include和require的区别

两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出;据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许linux下情况不同,暂时还没测试;如果一个文件不想被包含多次可以使用include_once或require_once

【14】session在函数和方法中的应用:你打算注册进session的变量都必须是全局的。

原因是这样的:

php的session_register函数只是记住变量的名字,而不会去记变量的值。

真正要在服务器端记住这个变量的值是在整个脚本运行结束之后,也就是说变量的值是在脚本运行结束的时候才会被读取并保存入服务器端的临时目录,这样,在所有函数或方法外的、或在函数或方法内被定义为全局变量的变量才会成功register,而其他的则都会在脚本运行结束时被unset掉。

【15】PHP中的session由于基于cookie实现,所以在所有会话窗口关闭后并不会马上消失。这一点和其他脚本语言不同,同时让我感到郁闷。

答:不不不

,楼上的朋友没有把php的session研究透,如果非要说php的session跟cookie有关系,那也就是一个session_id被记录在了客户端

而在服务器端的临时目录下,会生成一个跟session_id大致同名的文件,这个文件才是真正记录你成功register过的变量和它们的值。同样,如果客户端禁止使用cookie,php会自动以get的方式传递session_id的值,使其不会丢失。所以,cookie跟session之间的关系,并不是那么密不可分。而且,php的session也不能说是基于cookie实现的。

【16】isset()和empty()的区别

如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示;

两者都是测试变量用的,但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空

如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。要注销一个变量,可以用 unset($foo)或者$foo=NULL

【17】通过HTTP协议一次上传多个文件的方法

有两个思路,是同一个方法的两种实现。

1,在form中设置多个文件输入框,用数组命名他们的名字,如下:

<form action="" method=post enctype="multipart/form-data">
<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 enctype="multipart/form-data">
<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>";

【18】可以创建一个临时的PHP格式的文件,在需要的地方include进来,这样临时的PHP文件中定义的变量就有了,可以取代session。

【19】正如上面说得,现在get,post方式提交的都无法直接使用,有时甚是麻烦,自己写了段代码,把他们转化为全局变量,以便使用,session变量同理可得。

把通过GET或POST方式提交的变量转化为全局变量:
foreach($_GET as $key=>$value){
$$key=$value;
}
foreach($_POST as $key=>$value){
$$key=$value;
}

【20】自动判断PHP版本,并把所有环境变量转为全局变量

<?php
function pmyoutput(&$a)
{
if (is_array($a))
{
array_walk($a,'pmyoutput');
}
else
{
$a = stripslashes($a);
}
}
function pmyinput(&$a)
{
if (is_array($a))
{
array_walk($a,'pmyinput');
}
else
{
$a = addslashes($a);
}
}
if (phpversion() < '4.1.0')
{
isset($HTTP_SESSION_VARS) ? $GLOBALS['_SESSION'] = &$HTTP_SESSION_VARS : '';
isset($HTTP_SERVER_VARS) ? $GLOBALS['_SERVER'] = &$HTTP_SERVER_VARS : '';
isset($HTTP_ENV_VARS) ? $GLOBALS['_ENV'] = &$HTTP_ENV
_VARS : '';
isset($HTTP_FILES_VARS) ? $GLOBALS['_FILES'] = &$HTTP_FILES_VARS : '';
if (get_magic_quotes_gpc() == )
{
isset($HTTP_GET_VARS) ? $GLOBALS['_GET'] = &$HTTP_GET_VARS : '';
isset($HTTP_POST_VARS) ? $GLOBALS['_POST'] = &$HTTP_POST_VARS : '';
isset($HTTP_COOKIE_VARS) ? $GLOBALS['_COOKIE'] = &$HTTP_COOKIE_VARS : '';
}
else
{
isset($HTTP_GET_VARS) ? pmyinput($HTTP_GET_VARS) : '';
isset($HTTP_POST_VARS) ? pmyinput($HTTP_POST_VARS) : '';
isset($HTTP_COOKIE_VARS) ? pmyinput($HTTP_COOKIE_VARS) : '';
$GLOBALS['_GET'] = &$HTTP_GET_VARS;
$GLOBALS['_POST'] = &$HTTP_POST_VARS;
$GLOBALS['_COOKIE'] = &$HTTP_COOKIE_VARS;
}
$GLOBALS['_REQUEST'] = array_merge($_GET, $_POST, $_COOKIE);
}
else
{
if (get_magic_quotes_gpc() != )
{
isset($_GET) ? pmyinput($_GET) : '';
isset($_POST) ? pmyinput($_POST) : '';
isset($_COOKIE) ? pmyinput($_COOKIE) : '';
isset($_REQUEST) ? pmyinput($_REQUEST) : '';
}
}
?>

【21】中文日期显示函数

unction Get_Date($sent)
{
//return local area time now it's available DSONet @ 2003-8-7 17:29
$months=array('一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月');
$weeks = array('星期日','星期一','星期二','星期三','星期四','星期五','星期六');
list($sec,$min,$hour,$mon,$year,$mday,$wday,$yday) = explode(" ",date("s i H n Y j w z",date($sent)));
list($Tsec,$Tmin,$Thour,$Tmon,$Tyear,$Tmday,$Tyday) = explode(" ",date("s i H n Y w z",time()));
$mon-=;
//$mday.="日";
$date="{$year}年$months[$mon]{$mday}日";
if ($year == $Tyear)
{
$Cyday = $Tyday - $yday;
if ($Cyday == ) { $date = "今天"; }
else if ($Cyday == ) { $date = "昨天"; }
else if ($Cyday == ) { $date = "前天"; }
else if ($Cyday <= ) { $date = "$weeks[$wday]";}
return $date;
}
return $date;
//return date("M d Y H:i",$sent);
}
另外如果您的php无法接受中文,有以下方法:
//htmlentities maybe can't supported to chinese gb2312 DSONet @ 2003-8-7 17:00
//$email = htmlentities($in['email']);
//following is ok
$subject = htmlspecialchars($in['subject'],ENT_QUOTES);
还有这个正则表达式可以去掉(\")
$txt=ereg_replace("([\r\n])","",$txt);
//DSONet @ 2003-8-8 12:09
//cause $txt include some interpunction like \" so must clearn these dirty words.I don't konw why it has these bad words now .js?
$txt=ereg_replace("[\\](\")","\"",$txt);

【22】取得上一页面参数

function get_arg($arg_name)
{
return isset($_POST[$arg_name])?$_POST[$arg_name]:(isset($_GET[$arg_name])?$_GET[$arg_name]:(isset($$arg_name)?$$arg_name:""));
}

PHP中常见问题总结的更多相关文章

  1. VC++学习之VC中常见问题

    VC++学习之VC中常见问题 (1)为什么某个类突然在工作区间里面突然看不见了? 只是类隐藏了,打开FILEVIEW,找到隐藏类的头文件,随便敲一下键盘的空格键,类就会在CLASSVIEW中显示了 ( ...

  2. 小程序开发过程中常见问题[微信小程序、支付宝小程序]

    目录 一.样式中如何使用background-image呢? 二.使用自适应单位rpx类似于rem,布局尽量使用flex布局 三.万能的{{双大括号,用于在模版中输出变量 四.你想要的基础组件和API ...

  3. 【转】Linux中常见问题(磁盘 定时任务)

    [转]Linux中常见问题(磁盘 定时任务) 第1章 linux无法上网 1)     第一步,先ping域名. ping www.baidu.com 2)再ping一个公网ip , ping 223 ...

  4. (转)CloudStack 安装及使用过程中常见问题汇总

    CloudStack 安装及使用过程中常见问题汇总             在做工程项目中对CloudStack 安装及使用过程中常见的几个问题及如何解决做一个总结.   1.Windows XP虚拟 ...

  5. Hibernate中常见问题 No row with the given identifier exists问题

    收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决 2007年11月21日 15:02:00 eyejava 阅读数:2 ...

  6. iOS开发中常见问题集锦

    在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...

  7. SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发

    大家都知道SAP HANA项目打包成Delivery Unit(缩写为DU).依照"官方"的开发模式,特别是整个团队仅仅使用一个HANA Instance进行项目开发,因为HANA ...

  8. mysql在查询中常见问题汇总

    1.从主从表中查询外键内容(常见问题) 从主从表中查询对应的外键,需要指定外键的表,即sno=> student.sno或者score.sno 错误:select sno,sname,degre ...

  9. Android Studio使用过程中常见问题及解决方案

    熟悉Android的童鞋应该对Android Studio都不陌生.Android编程有两个常用的开发环境,分别是Android Studio和Eclipse,之前使用比较多的是Eclipse,而现在 ...

  10. js/jQuery使用过程中常见问题

    目录 一.jQuery选择器选择选中的或者disabled的选择框时attr函数无效 二.jQuery each函数的break/continue 三.jQuery 获取元素的left会值/left数 ...

随机推荐

  1. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  2. e770. 确定按钮租中已选的单选按钮

    When you ask a button group for the currently selected radio button, it returns the selected radio b ...

  3. Python——eventlet.event

    该模块提供eventlet的事件支持,事件提供了跨 greenthread 的操作原语. 同一个事件对象既可以发出事件也可以接收(等待)事件,不同的协程共享这一个事件对象,就为不同协程之间基于事件的同 ...

  4. jQuery使用动态渲染表单功能完成ajax文件下载

    原文链接:http://www.poluoluo.com/jzxy/201301/195126.html 封装的通用js函数代码: // Ajax 文件下载 jQuery.download = fun ...

  5. linux stat命令参数及用法详解

    功能说明:显示inode内容.语 法:stat [文件或目录]补充说明:stat以文字的格式来显示inode的内容. ls 命令及其许多参数提供了一些非常有用的文件信息.另一个不太为人所熟知的命令 s ...

  6. JS jQuery json日期格式问题的办法

    原生JS:Date对象详细参考 Date对象:基于1970年1月1日(世界标准时间)起的毫秒数 本文参考MDN做的详细整理,方便大家参考MDN 构造函数: new Date(); 依据系统设置的当前时 ...

  7. 开源项目推荐:e-example / Springboot+bootstrap + ……

    前言: 我想要找一个 springboot + bootstrap 的例子介绍,然后搜索到了这个开源项目. 所有能跑起来的项目都有研究价值,看看这个项目的文档.目前正好满足我想要的功能.推荐 正文: ...

  8. 纯js实现最简单的文件上传(后台使用MultipartFile)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. C语言中的数组问题

    数组默认最后一位是 结束符 占一位, 假如是7个字节大小的数组 实际输入为6个字节,最后一个字节为'\0' 这样写 char password_set[7]={"123456"}; ...

  10. 双向认证SSL原理

    http://m.blog.chinaunix.net/uid-540802-id-3170984.html 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的 ...