第一次用PHP做网站遇到的问题小结
1 。整合前台时,css image js 要将文件放在模板文件夹里面调用
比如这样的:
<link rel="stylesheet" type="text/css" href="templates/css/login.css" />
2 。修改php.ini 文件里的 display_errors 值 。默认是On 。 。。表示在页面上显示错误信息,这里修改为display_errors = off 表示错误信息不显示在页面上。
3. 解决 上传的文档中文名在项目文件乱码的问题。。使用 iconv 函数转换编码。
//移动上传文件到目标目录
if (file_exists("uploads/" . $_FILES[‘file‘][‘name‘]))
{
echo "<br/>".$_FILES[‘file‘][‘name‘] . " 上传文件已经保存在本地";
}
else
{
// iconv(‘UTF-8‘,‘gb2312‘,$upload) 将转换为gb2312
// "uploads/" . $_FILES[‘file‘][‘name‘]
move_uploaded_file($_FILES[‘file‘][‘tmp_name‘], iconv(‘UTF-8‘,‘gb2312‘,"uploads/" . $_FILES[‘file‘][‘name‘]));
echo "<br/>上传文件本地保存路径: " . "uploads/" . $_FILES[‘file‘][‘name‘];
}
4. 灰常蛋疼的文件下载 乱码问题。。
描述: 上传的文件没有出现乱码,下载的时候通过列表跳转的下载页面,传的参数是文件名字。。 结果很不幸的出现了下载过程
5. 页面上的新闻列表使用title 做名字,写herf 里使用了id 做跳转后的参数。采用的是smarty模板 ,结果跳过去后 怎么都没取出 id
模板文件里使用的是foreach 遍历的。
{foreach name=outer item=contact from=$newlist4}
{foreach key=key item=item from=$contact}
{if $key eq ‘name‘ }
{assign var="tit" value="$item" }
{/if}
{if $key eq ‘id‘}
{assign var="is" value="$item"} 定义一个变量 is 存新闻的id
{/if}
{if $key eq ‘title‘}
<a href="shownew.php?id={$is}" title="{$item}"> {$tit}</a> 取出变量值 及新闻的id
{/if}
{if $key eq ‘time‘}
<span>{$item}</span>
<br/>
{/if}
{/foreach}
{/foreach}
取出上面新闻列表结合的SQL 语句是:
$sql = "SELECT title ,time , id , from news WHERE type LIKE ‘".$type."‘ ORDER BY time desc limit 0 , 9 ";
上面遍历中的 name 属性是我处理后加的属性值(存放我在title里截取的要显示的固定字数的字符串) ,看看那个foreach 遍历处理方法 ,和这句SQL语句。分析一下就能发现 错误出在哪儿了。 因为 对PHP不熟悉,对SMARTY模板也是刚接触和使用,所以那个遍历过程写的很挫,仅仅实现了功能而已,因为SQL处理的结果 id 放在了最后一个,当然处理得到的结果集数组中,id 就是最后一个。问题就出现在上面两句红色的语句那儿,
第一句是当key(字段名)是id 时,定义一个变量并存下 id 值,第二句是调用了第一句定义的变量。 由于SQL 的 select 结果中 id 在 title 后,导致。上面的第二句调用的时候,第一句话还没有执行,也就是。此时那个变量还不存在的。。这就是为什么 href 中链接时没有id参数值呢、、、
总结: 处理这类问题时,一定要弄清逻辑关系,把握SQL 语句的处理结果集。
6. URL书写时一定要注意,多了一个空格都会在传输时(GET方式)出问题。好像会多一个“%20” 样。
7 。 成功实现 将excel 转到 页面上去。
<?php
// Test CVS
require_once ‘reader.php‘; // 导入的一个phpexcelreader 框架 专门用来 读取excel的开源框架。
下载地址: http://sourceforge.net/projects/phpexcelreader/
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
// Set output Encoding.
$data->setOutputEncoding(‘UTF-8‘);
$data->read(‘1.xls‘);
error_reporting(E_ALL ^ E_NOTICE);
echo "<html>" ;
echo "<center>" ;
echo "<table width=900 cellspacing=0 cellpadding=5 border=1 >" ;
for ($i = 1; $i <= $data->sheets[0][‘numRows‘]; $i++) {
echo "<tr>" ;
if($i ==1)
{
for ($j = 1; $j <= $data->sheets[0][‘numCols‘]; $j++)
echo "<th>".$data->sheets[0][‘cells‘][$i][$j]."</th>";
}
else {
for ($j = 1; $j <= $data->sheets[0][‘numCols‘]; $j++)
echo "<td>".$data->sheets[0][‘cells‘][$i][$j]."</td>";
}
}
echo "</tr>";
echo "</table>" ;
echo "</center>" ;
echo "</html>" ;
//print_r($data);
//print_r($data->formatRecords);
?>
8 . 解决新闻首页显示字数截取指定长度 乱码的问题
分析:为了达到截取目的,首先将字符串转为数组 ,然后取出一定长度的子数组,最后将其转化为字符串。 乱码的原因在于 数字 汉字 特殊符号 字母的 类型不同 字节不一样。。php中的处理成数组方法处理的时候就会将某些类型的字符破坏从而导致出现乱码的问题。。。
使用Unicode 编码处理方式 能够避免此问题。。处理函数如下:
// 截取字数方法
function str_split_unicode($str, $l = 0) {
if ($l > 0) {
$ret = array();
$len = mb_strlen($str, "UTF-8");
for ($i = 0; $i < $len; $i += $l) {
$ret[] = mb_substr($str, $i, $l, "UTF-8");
}
return $ret;
}
return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}
字符串:
$str = "asd书阿东a>?>>?asd ad??>A?>SD>A>SD>--__++_+_+__" ;
调用:
$str_array = str_split_unicode($str);
print_r( $str_array);
结果:
Array ( [0] => a [1] => s [2] => d [3] => 书 [4] => 阿 [5] => 东 [6] => a [7] => > [8] => ? [9] => > [10] => > [11] => ? [12] => a [13] => s [14] => d [15] => [16] => a [17] => d [18] => ? [19] => ? [20] => > [21] => A [22] => ? [23] => > [24] => S [25] => D [26] => > [27] => A [28] => > [29] => S [30] => D [31] => > [32] => - [33] => - [34] => _ [35] => _ [36] => + [37] => + [38] => _ [39] => + [40] => _ [41] => + [42] => _ [43] => _ )
来源: <http://localhost:8088//www/test/test1.php>
完美解决问题。。。
9 。
Google Viewer :在线查看。
https://docs.google.com/viewer?url=http://xxty.cdu.edu.cn/uploads/20130407164539.xls
下载:
直接请求资源就能下载啊。。。。又2了一地啊。。。。。。用不着去写一个下载的php页面。
10 。 获取项目在服务器上的绝对路径的方法。上传文件的时候要。
<?php
define(‘root_path‘,dirname(dirname(__FILE__)));
// 拆为字符数组
$arr = str_split(root_path);
//调用change 方法转换 下换线,然后装回字符串。
$ROOT_PATH = implode(change($arr)) ;
function change ($arr)
{
for ($i = 0; $i < strlen(root_path); $i++)
{
if($arr[$i] ==‘\\‘ )
$arr[$i] = ‘/‘;
}
return $arr ;
}
echo "root_path = ".$ROOT_PATH ;
?>
本文出自 “丑小鸭的天空” 博客,谢绝转载!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。