SOS 用php的fopen生成的页面,底部怎么会出现多余字节?急急急,在线等。。。 本帖最后由 chnking123 于 2011-02-17 11:32:46 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方法一 : 不要用fopen 改用file_get_contents函数方法二 : 用正则把末尾可能多余的字符去掉preg_match('/(.*\?>)/is',$str,$match);print_r($match[1]);//查看源文件 可看到结果。 $static_newsID = $_GET['newsID']; $static_newsUrl = "{$static_newsID}.php"; if ($handle = fopen($static_newsUrl, 'w')) { //相关阅读 $interfixNews_content = ''; if (count($interfixNews['data']) != 0) { $interfixNews_content = '<dl class="rk"><dd class="xiang_g">相关阅读</dd>'; for ($k = 0; $k < count($interfixNews['data']); $k++) { $interfixNews_newsid = $interfixNews['data'][$k]['newsid']; $interfixNews_title = str_replace("'", "\'", $interfixNews['data'][$k]['title']); $interfixNews_title_sub = str_replace("'", "\'", cutstr($interfixNews['data'][$k]['title'], 0, 50)); $interfixNews_dateline = $interfixNews['data'][$k]['dateline']; $interfixNews_content .= ' <dd>·<a href="/'. $interfixNews_newsid .'.html" target="_blank" title="'. $interfixNews_title .'">'. $interfixNews_title_sub .'</a> '. $interfixNews_dateline .'</dd>'; } $interfixNews_content .= '</dl>'; } $content = '<?php '. $interfixNews_content .' <input type="hidden" id="newsID" value="'. $static_newsID .'">\';?>'; //写入、关闭文件 fwrite($handle, $content); fclose($handle); //写入、关闭文件 fwrite($handle, $content); fclose($handle);改成://写入、关闭文件if(preg_match('/(.*\?>)/is',$content,$match)){ if(!empty($match[1])){ $content = $match[1] ; }}fwrite($handle, $content);fclose($handle); 你的写法不严谨,如果像这种合成页面的写入,最好使用wb 这种二进制模式写入,对于fopen w型写入,实际上是文本模式的写入,不同的数据内码,可能会导致长度的判断不严谨,从而导致数据混乱建议用wb模式或直接使用 file_put_contents 试下两种方法:1、使用fopen($static_newsUrl, 'wb')来打开文件;2、使用c模式打开文件,代码如下:if ($handle = fopen($static_newsUrl, 'c')) { if (flock($fp, LOCK_EX)) { ftruncate($fp, 0); //... fwrite($handle, $content); flock($fp, LOCK_UN); } else { echo '无法锁定文件'; } fclose($handle);} 恩,谢谢 apachectl,也谢谢大家!我这边改用wb模式了,看看要是还有问题再请教大家 meta问题 smarty二级菜单输出的问题,困绕我几个星期了 找个PHP高手师傅 mysql_insert_id 的问题 有愿意来长沙做php开发的朋友没? 关于包含文件的的问题。 要做一个j2eeweb和另一个php服务器直接通信的加密,求大神给点思路 我想问一下,有没有php下的类似与.net下的freetextbox的东西 用GD库的问题 到底用SESSION呢还使用COOKIE呢? PHP正则问题 session_start() 莫名其妙.......
print_r($match[1]);//查看源文件 可看到结果。
改成:
//写入、关闭文件
if(preg_match('/(.*\?>)/is',$content,$match)){
if(!empty($match[1])){
$content = $match[1] ;
}
}
fwrite($handle, $content);
fclose($handle);
建议用wb模式或直接使用 file_put_contents
1、使用fopen($static_newsUrl, 'wb')来打开文件;
2、使用c模式打开文件,代码如下:
if ($handle = fopen($static_newsUrl, 'c')) {
if (flock($fp, LOCK_EX)) {
ftruncate($fp, 0);
//...
fwrite($handle, $content);
flock($fp, LOCK_UN);
} else {
echo '无法锁定文件';
}
fclose($handle);
}