最令PHP初学者们头痛的十四个问题

preview
需积分: 0 0 下载量 105 浏览量 更新于2020-12-17 收藏 80KB PDF 举报
【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=”.urlenc 【PHP页面间变量传递】 在PHP最新版本中,为了增强安全性,自动全局变量`register_globals`已经被默认关闭。这意味着在不同页面间传递变量时,不能再像以前那样直接使用`$foo`,而是需要通过`$_GET['foo']`, `$_POST['foo']`, `$_SESSION['foo']`等预定义数组来获取。尽管可以通过修改`php.ini`文件将`register_globals`设置为`On`来恢复旧的全局变量行为,但这样做并不推荐,因为这可能导致安全漏洞和兼容性问题。因此,学习并适应新的变量获取方式是更明智的选择。 【Win32下Apache2 GET传递中文参数错误】 在Windows环境下,使用Apache2通过GET方法传递包含中文字符的参数可能会遇到问题。例如,`test.php?a=你好&b=你也好`可能导致内部错误。解决这个问题的方法是对中文参数进行URL编码,使用`urlencode()`函数,如`"test.php?a=".urlencode('你好')."&b=".urlencode('你也好')`。这样可以确保URL中的中文字符正确传输。 【Win32下的Session问题】 PHP在Win32系统中默认的`session.save_path`配置是针对Linux系统的 `/tmp` 目录,这会导致在Windows环境下无法正常工作。要解决此问题,需要在`php.ini`中将`session.save_path`更改为Windows下的一个绝对路径,例如 `c:\Windows\temp`。 【显示错误信息】 在开发过程中,为了便于调试,应开启`display_errors`和`error_reporting`。当`display_errors = On`且`error_reporting = E_ALL`时,所有错误和警告都会显示。如果出现关于未定义变量的错误,可以使用`isset()`函数检测变量是否存在,或者使用错误抑制符`@`,如`if(isset($foo)) echo $foo;` 或 `echo @$foo;`。 【Win32下`mail()`函数发送邮件】 在Windows环境下,`mail()`函数通常不能直接发送邮件,因为缺少类似Linux下的sendmail配置。此时,需要配置`SMTP`服务器的IP地址,如`SMTP = ip`,其中`ip`是无验证功能的SMTP服务器。更好的方法是通过socket直接与目标邮件服务器通信,避免依赖转发服务器。 【MySQL无密码设置】 初次安装MySQL后,若未设置密码,可使用SQL语句`UPDATE mysql.user SET password = 'yourpassword' WHERE user = 'root';`来修改root用户的密码。 【`header()`已发送错误】 当尝试使用`header()`函数时,如果在此之前有输出(如打印、echo),或者文件开头有空行,或者包含的文件尾部有输出,都可能导致“header already sent”错误。解决方法是检查并消除这些潜在的输出,确保在使用`header()`前没有其他内容被发送。 【`php.ini`更改无效】 修改`php.ini`后,必须重启Web服务器(如IIS或Apache)以使新设置生效。 【PHP在Windows Server 2003上的安装】 对于ISAPI安装,由于PHP4的`php4isapi.dll`可能存在与Windows Server 2003的冲突,建议使用CGI模式安装。步骤包括下载安装程序,配置IIS,新建Web服务扩展,指定PHP可执行文件路径,并允许扩展运行。 【SQL语句调试】 当SQL语句执行失败时,可以尝试将SQL语句echo出来,查看变量的值是否正确,以帮助调试。 【`include`与`require`的区别】 两者都用于包含文件,但当包含的文件不存在时,`include`仅发出Notice并继续执行,而`require`则抛出Fatal Error并停止脚本。`include_once`和`require_once`则确保文件只被包含一次,防止重复加载。在Windows平台上,它们通常先包含后执行,而在多线程环境下,如*nix系统,情况可能有所不同。 以上就是PHP初学者常遇到的一些问题及其解决方案,理解并掌握这些知识将有助于更好地学习和使用PHP。
weixin_38707862
  • 粉丝: 8
  • 资源: 922
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜