首页 > 编程技术 > php

Php引用文件引起的空白行问题(UTF-8)

发布时间:2016-11-25 17:38

可能会有不少人碰到在php中如果是utf8编码我们导入文件时会出现空白行的问题,下面我来给各位同学介绍引用文件空白行的解决办法。

引用文件指的是include、require_once引用其它文件引起的空白行

这其实是你用记事本编辑UTF-8文件以后,虽然你还是保存为UTF-8格式,但系统会自动给文件加两个bom标记,但是ie只能忽略一个,另一个就是空白行了。
解决办法就是:

不要用记事本去编辑UTF-8文件,要用其它工具,比Dreamw、EmEditor 、Visual Studio 2008等编辑工具编辑UTF-8文件后保存。

我的两个站用记事本编辑后顶部就有空白行,起初以为是css设置问题,结果是bom标记引起的。

还有一种办法,如果你是大量文件都这样我们可使用一个php函数来搞定

把以下代码复制到一个PHP文件里面,然后放在需要清除BOM头的目录一下运行,就可以批量把PHP空白的首行清除掉,太给力了。

 代码如下 复制代码

 
<?php  
if (isset($_GET['dir'])){ //设置文件目录  
$basedir=$_GET['dir'];  
}else{  
$basedir = '.';  
}  
$auto = 1;  
checkdir($basedir);  
function checkdir($basedir){  
if ($dh = opendir($basedir)) {  
  while (($file = readdir($dh)) !== false) {  
   if ($file != '.' && $file != '..'){  
    if (!is_dir($basedir."/".$file)) {  
     echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";  
    }else{  
     $dirname = $basedir."/".$file;  
     checkdir($dirname);  
    }  
   }  
  }  
closedir($dh);  
}  
}  
function checkBOM ($filename) {  
global $auto;  
$contents = file_get_contents($filename);  
$charset[1] = substr($contents, 0, 1);  
$charset[2] = substr($contents, 1, 1);  
$charset[3] = substr($contents, 2, 1);  
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {  
  if ($auto == 1) {  
   $rest = substr($contents, 3);  
   rewrite ($filename, $rest);  
   return ("<font color=red>BOM found, automatically removed.</font>");  
  } else {  
   return ("<font color=red>BOM found.</font>");  
  }  
}  
else return ("BOM Not Found.");  
}  
function rewrite ($filename, $data) {  
$filenum = fopen($filename, "w");  
flock($filenum, LOCK_EX);  
fwrite($filenum, $data);  
fclose($filenum);  
}  
?>

初次使用php的朋友可能发现我们配置好php环境之后利用php date函数输出日期时会发现日期与正确日期相关8个小时哦。

 代码如下 复制代码

<?php
    echo date('Y-m-d H:i:s');
?〉

输出当前时间:2008-10-12 02:32:17
怪了,实际时间是:2008-10-12 10:32:17

难道是PHP的date()时间不正确 少8个小时?

再看看PHP手册的“例子 1. date() 例子”第一行多了一个 时区设置
// 设定要用的默认时区。自 PHP 5.1 可用

 代码如下 复制代码

date_default_timezone_set('UTC');

原来php5.1.开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的,也就是显示的时间(无论用什么php命令)都是格林威治标准时间,和北京时间正好差8个小时。

如何设置可以得到正确的PHP时间?

1、修改php.ini。打开php.ini查找date.timezone 去掉前面的分号= 后面加Asia/Shanghai,重启apache服务器即可--缺点就是如果程序

放到别人的服务器上,不能修改php.ini,我们可以修改php程序哦

 代码如下 复制代码


<?php
date_default_timezone_set('Asia/Chongqing');
echo date('Y-m-d H:i:s');
?>


直接加上加上8小时的秒数

 代码如下 复制代码

<?php
echo date("Y-m-d H:i:s",time()+8*60*60);
?>

本教程来给各位同学介绍failed to open stream: No such file or directory in解决办法,有需要了解的朋友可进入参考。

 

Warning: include_once(./include/main.inc.php) [function.include-once]: failed to open stream: failed to open stream: No such file or directory in

Fatal error: main(): Failed opening required './Config.php' (include_path='.;c:php4pear') in D:wwwrootCoreConfig.php on line 13


出现这个的问题是因为我们inlcude的路径不对了,只要我们把路径改对就可以了。

Fatal error: main(): Failed opening required './Config.php' (include_path='.;c:php4pear') in D:wwwrootCoreConfig.php on line 13

shopex主机问题描述

 

Warning:
require(/core/include_v5/adminCore.php) [function.require]: failed to open stream:
No such file or directory in D:wwwrootbeisososhopadminindex.php on line 13
Fatal error:
require() [function.require]:
Failed opening required "/core/include_v5/adminCore.php" (include_path=".;C:php5pear")


三、shopex主机解决方案

给D:和D:wwwroot 一个everyone可读权限,只在这两个位置加权限就可以了,不要附加到下一级目录!
命令如下:
cacls d: /e /g everyone:r
cacls d:wwwroot /e /g everyone:r

最近遇到一些PhpStorm编程的问题: 在使用Zen Coding插件时,PHPStorm不像Notepad++那样随便使用。PHPStorm只有在编辑识别为HTML的文件时才可以使用Zend Coding。 在PHPStorm编程时,关于数据库操作的SQL语句会有相应的提示。
于是搜索PhpStorm在编写PHP代码,能否切换某一块代码片段到其他编程语言。
在很多项目中,我们经常在编程的时候想进行切换编程语言,通常我们需要在代码的字符串中嵌入一块不同的编程语言。例如:在PHP代码中嵌入一个HTML片段,如果你也遇到类似的情况。
 
$htmlFragment 变量为一段HTML代码,其中有部分PHP变量和转义字符串。
而遇到这种情况,就不能很好的使用HTML代码提示,比如<p></p> 不能直接通过自动闭合等,一个一个的敲打键盘是一个非常苦力的事。
PhpStorm编程语言切换
PhpStorm能够认识到这些情况,它为我们提供了一个功能全面的HTML编辑器来编辑现有的字符串:
PhpStorm编程语言切换演示
我们也可以创建一个字符串,并使用语言切换(Alt+Enter)手动指定字符串到有另外的的语言:
PHPStorm 使用语言切换(Alt+Enter)手动指定字符串到有另外的的语言
这是一个非常棒的小功能,完全提高了编程效率。而且这个功能适用于其他所有语言。

 

这个功能完全方便了我在编辑PHP代码时使用Zen Coding

 

昨天我在做一个简单采集功能时我直接使用了file_get_contents函数,但是采集有些网站没问题,采集有些网筹码了,后来分析出现乱码是服务器开启了gzip压缩功能哦。

我采集的一个页面,如下gzip

知道原因了我们就好办了,先百度了一下得出是可以改用curl操作。

curl解决

 代码如下 复制代码

function curl_get($url, $gzip=false){
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
        if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里
        $content = curl_exec($curl);
        curl_close($curl);
        return $content;
}

采用gzip编码格式

file_get_contents解决:

 代码如下 复制代码

file_get_contents("compress.zlib://".$url);

无论页面是否经过gzip压缩,上述代码都可以正常工作!

注意:CURL是需要打开的哦。

curl安装:

xp下面的安装

:修改php.ini文件的设置,找到

 代码如下 复制代码
php_curl.dll

//取消下在的注释extension=php_curl.dll

linux下面安装:

 代码如下 复制代码

# wget http://curl.haxx.se/download/curl-7.17.1.tar.gz

# tar zxvf curl-7.17.1.tar.gz  //解压

#cd curl-7.17.1

# ./configure –prefix=/usr/local/curl

# make

# make install

这是安装php之前安装的方法.

标签:[!--infotagslink--]

您可能感兴趣的文章: