PHPer 高手之路
  • Introduction
  • First Chapter
  • 基础
    • 数据类型和常量
    • 字符串
      • 字符编码
      • 字符编码相关编程
    • 引用变量
    • 运算符与错误控制符@
    • 流程控制与条件判断
      • foreach遍历中的引用
    • 函数
    • 文件及目录处理
  • PHP 数组
    • 基础
    • PHP数组操作
    • 输入流 php://input
    • PHP数组的内部实现
    • PHP数组和数据结构
    • 示例技巧
  • PHP文件编程
    • 文件系统
    • 基础
    • 实例技巧
    • PHP中XML处理
    • PHP中JSON处理
    • PHP中CSV处理
    • 大文件上传
  • 正则表达式
    • 基础
    • 正则的引擎
    • 表达式的优化
    • PHP中正则的使用
  • PHP 编码技巧
    • PHP编码习惯
    • PHP语法糖
    • PHP代码优化
    • PHP重点新特性
    • PHP编码规范
  • PHP选项和运行原理
    • PHP SAPI
    • PHP运行模式及安装方式
    • 附录:进程和线程的Q解
    • Apache下的MPM模式
    • Apache 与 Nginx
    • PHP的运行机制及原理
    • PHP垃圾回收机制
    • PHP配置选项
  • PHP安全
    • 跨站脚本攻击(XSS )
    • 跨站请求伪造(CRSF)
  • PHP 高级特性
    • 异常处理(Exceptions)
    • 代码复用(Trait)
    • 预定义接口(Predefined Interfaces)
    • 魔术方法(Magic Methods)
    • 回调函数、匿名函数&闭包
    • 命名空间(Namespaces)
    • 自动加载(Autoload)
    • 反射(Reflection)
    • 魔术常量(Magic constants)
    • 综合实例
  • 附录:关键词
  • 附录:资料
  • 代码的版本控制
    • SVN
    • Git
      • 疑难杂症
  • Linux
    • Linux原理与基础
    • 常见命令
    • Shell 编程
    • awk 与 sed
    • 命令笔记
  • HTTP 协议
    • 请求方法与返回状态码
    • Cookie、Session 的原理
  • MySQL
    • MySQL表存储引擎
  • 标准PHP库(SPL)
    • 数据结构
      • SplPriorityQueue - 优先队列
      • SplQueue - 队列
      • SplStack - 栈的功能
    • 接口
      • Countable - count统计接口
  • 附录:ElasticSearch
  • PHP数据结构
  • 附录:Rabbitmq
  • 附录:guzzle
  • JavaScript
    • 附录:资料
  • 疑难杂症
Powered by GitBook
On this page
  • 合并多个文件
  • PHP创建网页快捷方式
  • pack 和 unpack 函数
  • 判断文件类型
  • 文件指针的定位操作

Was this helpful?

  1. PHP文件编程

实例技巧

合并多个文件

<?php

$fh=fopen('dest.txt','a');

$fh1=fopen('file1.txt','r');
while( ($data=fgets($fh1)) !== false ){
    fwrite($fh,$data);
}
fclose($fh1);

$fh2=fopen('file2.txt','r');
while( ($data=fgets($fh2)) !== false  ){
    fwrite($fh,$data);
}
fclose($fh2);

fclose($fh);

PHP创建网页快捷方式

$Shortcut = "[InternetShortcut]
URL=http://www.baidu.com
IDList=[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2";

file_put_contents('百度.url',$Shortcut);

pack 和 unpack 函数

pack 把数据打包成二进制数据

//如果指定的长度不够20,则剩余的长度都有空格填满.如abc只填充了3个字符长度,其他17个则以空格填满
$name = pack('A20', 'abc'); 
//有符号短整型(16位,主机字节序)
$age = pack('S', '28');
// 以null填充未满位置
$email = pack('a20', '509129@qq.com');

以上共42个字节

合并的写法

$data = pack('A20Sa20', 'abc', '28', '509129@qq.com');

unpack 把二进制数据解包

必须知道打包时的格式解包

$items=unpack('A20name/Sage/a20email',$data);
print_r($items);
exit;

判断文件类型

一些时候,后缀名并不能正确判断出文件文类,以下只是一个采用二进制分析文件类型,以作记录

function checkFileType($fileName){
        $file     = fopen($fileName, "rb");
        $bin      = fread($file, 2); //只读2字节
        fclose($file);
        $strInfo  = unpack("C2chars", $bin);// C为无符号整数,网上搜到的都是c,为有符号整数,这样会产生负数判断不正常
        $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
        $fileType = '';
        return ($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/);  
}

采用exif_imagetype系统函数,但是一些特殊的无法判断,比如说word等,这种则需要使用上面的方式

function checkFileType($fileName){
    $typeCode = exif_imagetype($fileName);
    return $typeCode == IMAGETYPE_JPEG || $typeCode == IMAGETYPE_GIF || $typeCode == IMAGETYPE_PNG;
}

采用pathinfo 获取文件后缀,这种方式并不能正确的判断文件类型.

function getExtension($filename) {
    return pathinfo($filename, PATHINFO_EXTENSION);
}
echo getExtension($filename);

文件指针的定位操作

适用于二进制文件

fseek () - 在文件指针中定位
ftell() - 返回文件指针读/写的位置
rewind() - 倒回文件指针的位置
feof - 测试文件指针是否到了文件结束的位置
$myfile =fopen('top.png' ,'r');
fseek($myfile,1);
$bytes=fread($myfile,3);
echo($bytes);
Previous基础NextPHP中XML处理

Last updated 5 years ago

Was this helpful?

在PHP中读取二进制文件
PHP中pack、unpack的详细用法