首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在PHP中检查文件是ASCII还是二进制

在PHP中检查文件是ASCII还是二进制,可以通过以下几个步骤来实现:

  1. 读取文件内容
  2. 遍历文件内容,检查每个字符是否为ASCII字符
  3. 如果所有字符都是ASCII字符,则文件为ASCII文件;否则,文件为二进制文件

以下是一个简单的PHP代码示例,用于检查文件是否为ASCII文件:

代码语言:php
复制
function isAsciiFile($filename) {
    $content = file_get_contents($filename);
    for ($i = 0; $i < strlen($content); $i++) {
        if (ord($content[$i]) > 127) {
            return false;
        }
    }
    return true;
}

$filename = 'test.txt';
if (isAsciiFile($filename)) {
    echo "$filename 是ASCII文件";
} else {
    echo "$filename 是二进制文件";
}

在这个示例中,我们首先使用 file_get_contents() 函数读取文件内容。然后,我们遍历文件内容,使用 ord() 函数获取每个字符的ASCII码。如果ASCII码大于127,则说明该字符不是ASCII字符,因此文件为二进制文件。如果所有字符都是ASCII字符,则文件为ASCII文件。

需要注意的是,这个方法只能检查文件是否为ASCII文件,而不能检查文件是否为二进制文件。如果需要检查文件是否为二进制文件,可以使用类似的方法,遍历文件内容,检查是否存在非ASCII字符。如果存在非ASCII字符,则文件为二进制文件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么?你还不会webshell免杀?(一)

> 免杀效果 某狗4.0 可以看到这里非常简单的混淆就能绕过安全狗 某塔最新收费waf 可以看到这简单的混淆无法绕过宝塔的 但是如果我们不使用敏感函数作为参数的话 还是可以发现其实只是过滤参数里的内容...如何在根本上去减少webshell带给服务器的危险,其实直接禁用一些关键函数,和不使用有危险的扩展是非常有效的方法。...虽说现在我们已经绕过了常见的waf,但是在真正的渗透,目标都使用的更高级的云waf,不但规则更新的比较快而且,还会将被拦截webshell进行记录,存在被溯源,和绕过的新思路被发现的可能,因此学习更多的混淆技巧...> 2.伪装成文件,以二进制方式传输 这种发送迷惑性比较大,很少有waf会去识别二进制的内容,顶多就是一些简单的正则表达式去匹配一些字符串,乱码根本就不全去识别 由于不能直接防止粘贴,因此需要在本地生成二进制文件...php printf($_FILES); 可以看到这些后缀和mime这些都是文件上传的敏感点,只要我们不去触发的话,waf还是会对我们很信任的 可以看到这里执行了phpinfo,关键在于这串字符是非常难解析的

1.5K10
  • PHP安全:变量的前世今生

    部分WAF在检查重复参数的时候,常常只检查第一个,我们可以通过重复传参bypass,/?...4、传参时的编码问题 (1).源代码存在文件操作函数时,url解码两次,此时可以两次编码urlencode。(%27变为%25%27) (2).Url解码时,如果遇到%+字母,会自动过滤%。...(3).变量名加上[]传入数组,绕过关于md5函数的一些检查md5(aaa[])===md5(bbb[]) (4).反序列化。...$value); } //结果 \x66\x6c\x61\x67 ?> (5).跟4的原理有相似之处。md5(xxx,ture)会输出一个16位的二进制数据,这个二进制数据也有机会被php解码。...(2).pcre回溯次数绕过 PHP的正则表达式,匹配模式带有通配符(例如或者?)就有可能发生回溯。

    1.7K20

    字符编码

    比如,在法语,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节闲置的最高位编入新的符号。比如,法语的é的编码为130(二进制10000010)。...解释:同一个文本文件,假设内容用英语写的,在英语编码的情况下,每个字符会和一个二进制数对应(00101000类似),然后存到计算机,这时把这个英语文件发给一个俄语国家的用户,计算机传输的二进制流...,即0101之类的数据,到了俄语用户这方,需要有它的俄语编码方式进行解码,把每个二进制流转为字符显示,由于俄语编码表对每串二进制流数据的解释方式不同,同一个数据00101000在英语可能代表A,而在俄语则代表...重复一遍,这里的关系,UTF-8Unicode的实现方式之一,它规定了字符如何在计算机存储、传输等。 UTF-8最大的一个特点,就是它是一种变长的编码方式。...1)ANSI默认的编码方式。对于英文文件ASCII编码,对于简体中文文件GB2312编码(只针对Windows简体中文版,如果繁体中文版会采用Big5码)。

    1.4K20

    针对黑客的Windows文件传输总结

    首先使用文本编辑器创建一个名为upload.php的脚本,然后将该脚本放置在/var/www/html。 这是 upload.php 的脚本: <?...\ftp.txt -encoding ascii -append 注意:在上面的示例,我们发送一个非二进制文件,因此 ftp.txt 文件中省略了‘binary’命令。...6.1使用Netcat将文件传输给受害者:cmd.exe 文件发送到的机器侦听器机器,在本例受害者。...为 PS1 脚本和二进制文件 (EXE) 设置目录允许我们将它们从攻击者计算机直接执行到受害者的内存。最重要的,这是不需要下载文件或将文件传输给受害者来完成的。...并非所有这些二进制文件都可以与 evil-winrm 一起使用,因为它只允许 .Net 程序集(从 C# 编译的可执行文件)在内存执行。

    62411

    Weevely入手指南

    Weevely一款python编写的webshell管理工具,作为编写语言使用python的一款工具,它最大的优点就在于跨平台,可以算作linux下的一款菜刀替代工具(限于php),总的来说还是非常不错的一款工具...hello.php /usr/share/weevely/hello.php 目前支持的后门格式主要是php :generate.php(生成php后门文件) :generate.img(将后门代码插入到图片中...:bruteforce.sql 爆破指定数据库用户名密码 :bruteforce.sqlusers 爆破所有数据库用户密码 :file.upload 上传本地文件 :file.upload2web 上传二进制.../ ASCII文件至目标站点文件夹并枚举URL :file.enum 在本地词表的书面枚举远程文件 :file.read 读文件 :file.rm 删除文件 :file.check 检查远程文件的状态(...md5值,大小,权限等) :file.download 下载远程二进制/ ASCII文件到本地 :sql.console 启动SQL控制台 :sql.dump 备份数据库,即脱库 :net.scan 端口扫描

    1.3K20

    字符、字符集、编码,以及它们python中会遇到的一些问题(上)

    Unicode可依不同需要以UTF-8、UTF-16、UTF-32等方式编码。      3、字符编码就是以二进制的数字来对应字符集的字符。 因此,对字符进行编码,信息交流的技术基础。...小张用的编码表ASCIIASCII编码表把26个字母都一一的对应到2进制1和0上;小王用的编码表可能EBCDIC,只不过EBCDIC编码与ASCII编码的字母和01的对应关系不同。...这个例子说明了三点:      1、不管任何文字图片等,最后都会以二进制的形式储存到电脑的磁盘(比如记事本A.txt,内容为"ABC"文件,在此磁盘中表现的就是01 01这种二进制形式) 盘片表面凹凸不平...2、 任何文件要储存到电脑中,都会事先进行编码,然后储存到电脑的磁盘,比如A.txt文件,默认编码为ANSI编码,也可以编码为UTF-8,然而不同的编码方式 对应着计算机用一个字节还是多个字节存储,用哪些字节来存储...然后,从"严"的最后一个二进制位开始,依次从后向前填入格式的x,多出的位补0。

    66470

    记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)

    0x02 前置知识铺垫 在理解这篇文章之前,我们首先需要大家了解的PHP异或(^)的概念。 我们先看一下下面这段代码: <?php echo "A"^"?"; ?> 运行结果如下: ?...在PHP,两个变量进行异或时,先会将字符串转换成ASCII值,再将ASCII值转换成二进制再进行异或,异或完,又将结果从二进制转换成了ASCII值,再将ASCII值转换成字符串。...比如像上面这个例子 A的ASCII65,对应的二进制01000001 ?...的ASCII63,对应的二进制00111111 异或的二进制的值10000000,对应的ASCII126,对应的字符串的值就是~了 我们都知道,PHP弱类型的语言,也就是说在PHP我们可以不预先声明变量的类型...我们希望使用这种后门创建一些可以绕过检测的并且对我们有用的字符串,_POST", "system", "call_user_func_array",或者任何我们需要的东西。

    2.8K21

    超详细文件上传漏洞总结分析

    一般情况下,Web应用都会允许用户上传一些文件头像、附件等信息,如果Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。...这里我们使用的php语言,属于高级语言,底层靠C语言来实现的,也就是说空字符的字符串拼接结束功能在PHP也能实现。...但是我们在URL不能直接使用空,这样会造成无法识别;我们通过查看ASCII对照表,发现ASCII对照表第一个就空字符,它对应的16进制00,这里我们就可以用16进制的00来代替空字符,让它截断后面的内容...> 命令: copy a.png /b + a.php /a 3.php /b:指定以二进制格式复制、合并文件,用于图像或者声音类文件 /a:指定以ascii格式复制、合并文件用于txt等文本类文件...注:这条命令的意思:通过copy命令,把a.png图片文件,以二进制文件形式添加到a.php文件,以ASCII文本文件形式输出为3.php文件

    11.8K75

    PHP开发需要了解的知识

    二进制安全功能(binary-safe function)指在一个二进制文件上所执行的不更改文件内容的功能或者操作。这能够保证文件不会因为某些操作而遭到损坏。...二进制数据按照一串0和 1的形式编码的。而绝大多数的程序会给某些特殊的比特串赋予不同的格式代码,所以当用户使用一个程序读取一个二进制文件时,该文件会被按照这个程序的规则进行解释。...位:"位(bit)"电子计算机中最小的数据单位。每一位的状态只能0或1。 字节:8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位。...UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输。...串行化有效的解决了对象的保存和传输的问题.例如, 如果在用session并使用了 session_register() 来注册对象,这些对象会在每个 PHP 页面结束时被自动序列化,并在接下来的 每个页面自动解序列化

    77250

    WEB开发的字符集和编码

    引言 我相信很多人在初接触编程时,都被字符集狠狠地虐过,特别是数据库的中文乱码问题,那么乱码怎么产生的呢? 我们都知道计算机是以二进制存储和运行的,那么它是怎么把二进制数据转换为各种文字的呢?...其中: 0~31 及 127(共33个)控制字符或通信专用字符(其余为可显示字符),控制符:TAB(制表符)、CR(回车)、DEL(删除)、BS(退格)等,常用的ASCII值为 8、9、10 和13...tips: PHP我们可以使用ord($char)来得到一个字符的ASCII码; 可以用chr($int) 来得到得到对应ASCII数值的字符; ANSI编码 美国人发明了计算机,并将他们最常用的字符以一个字节存入了计算机...我们在使用window系统保存文件选择编码方式时,会看到有这个ANSI编码这个选项,在不同的windows系统,ANSI代表着不同的编码。...转换规则: 首先需要把该字符的 ASCII 的值表示为两个十六进制的数字,然后在其前面放置转义字符( % ),置入 URI 的相应位置;对于非 ASCII 字符(中文等), 需要转换为 UTF-8

    2K50

    编码在网络安全的应用和原理

    什么编码,为什么要有编码? 众所周知,计算机只能够理解0和1,也就是二进制。...在网络传输,这是不能忍受的。并且,当从中间开始匹配时,也不知道这个字节第一个还是第二个。所以都没有推广开。...现在版本的PHP一般默认不开启,不过利用addslashes()函数来过滤数据依旧很普遍。首先什么GBK编码绕过GPC呢?...就是可以用%DF来配合GPC或者 addslashes(),在编码转换存在问题的时候,就会生成一个乱码加上单引号’,造成SQL注入安全。...因为GBK编码的定义,当遇到一个字节其表示二进制数值转换成十进制后大于128就会默认这个字节和之后一个字节合并表示一个汉字,就把后面反斜杠\的内码吃掉了组成一个汉字 为什么要注入%DF呢?

    90160

    计算机基础知识_原码反码补码

    一、原码,反码,补码 1.原码   比如一个二进制数字 最高位0,(0代表正数) 0010 1000 那么原码就是0010 1000 反码: 0010 1000 补码: 0010 1000 都是一样的...,这个二进制数字的10进制40 所以是正数 正数的原反补都是一样的 2.反码   反码就是原码的取反,二进制的 0变为1 1变为0 ,看最高符号位0 还是1,如果1,则你要0变为1,1变为0, 3....补码:     负数的的原码 取反 在加1 变成补码(二进制数)     正数的原码 加上负数的补码就等于是做减法运算 二.编码: 编码ASCII字符型编码 Unicode国际化编码 存储: Ascii...文件名.c  /W检查严格不严格,注意W大写,一般1-4  4级最严格的 Cl/c/w1/wx  文件名.c 文件的警告变为错误....的用法 #include起到包含函数声明的作用 如果不用的话,列printf 你可以自己声明printf函数的声明 包含的和”’’”区别 一般规定的官方的库 “”一般规定就是在当前目录下寻找

    68000

    ​ 【SQL注入必学基础】--宽字节注入

    作者 木偶人哈克尔 0X01 知识背景 1 编码: 二进制:计算机内部由集成电路这种电子部件构成的,电路只可以表示两种状态——通电、断电,也就是使用二进制存储数据。...因为这个特性,计算机内部只能处理二进制。那为什么我们能在计算机上看到字母和特殊字符呢? ASCII码:如果我们用一个二进制数字表示一个字符,比如说用“0100 0001”来表示A。...而C定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。...由于ASCII编码使用一个字节,GBK编码使用两个字节。PHP语言编码为GBK,MYSQL编码也使用GBK编码。那么GBK这样占用字节较多的就叫宽字节编码。...PHP编码为GBK,函数执行添加的ASCII编码(添加的符号为“\”),MYSQL默认字符集GBK等宽字节字符集。

    1K10

    Linux超级强大的十六进制dump工具:XXD命令,我教你应该如何使用!

    在Linux操作系统,XXD一个十六进制dump工具,可以将二进制文件转换为十六进制表示,并以可读的形式显示。XXD命令可用于显示文件内容、编辑文件等用途。...本文将介绍如何在Linux中使用XXD命令。 安装XXD命令 通常情况下,XXD命令已经预装在Linux操作系统,因此无需安装即可使用。...图片 上面的输出显示了wljslmz.txt文件的每个字节的十六进制值和对应的ASCII字符。输出的第一列偏移地址,以十六进制表示,第二列十六进制表示,第三列ASCII表示。...XXD命令还可以用于编辑二进制文件。...编辑完成后,可以使用以下命令将文件保存并退出vim编辑器: :%!xxd -r 该命令会将vim编辑器的十六进制表示转换回原始的二进制数据,并将其写入到wljslmz.bin文件

    3.2K80

    命令执行漏洞

    > 和过滤后缀的题目一样,重命名后再在路径后面直接添加1.txt即可访问到 有新文件产生在url后面拼接新文件的名字 web38 题目: 发现还是一个文件包含题目,考虑使用php伪协议 使用伪协议发现可以执行...> web39 题目 发现只是过滤了参数c的”flag“字段,还是一个文件包含题目,考虑使用伪协议 按照上面的方式即可得到flag web40 array_pop() 删除数组的最后一个元素 array_pop...%40 | %01 可以取到A,或运算是两个都为0才为0,一个为1则为1 计算机中保存URL编码通过十六进制保存的 %40的二进制为0100 0000 %01的二进制为0000 0001 取或得到...0100 0001 结果从二进制转为十六进制,得到结果为65,转ascii码为A 生成可用字符的脚本 原理:从进行异或的字符中排除掉被过滤的,然后判断异或得到的字符是否为可见字符 <?...%,所以可以使用URL编码去解决问题 可以从ASCII为0-255的字符中找到或运算能得到的可用的字符 跑脚本吧,虽然最后我也没解出来,但是思路对的 web42 黑洞 ‘>/dev/null’命令 目的抑制各种命令输出的空设备

    28610

    文本与二进制方式打开文件的区别

    从上面可以看出文本文件基本上定长编码的(也有非定长的编码UTF-8),基于字符嘛,每个字符在具体编码固定的,ASCII8个比特的编码,UNICODE一般占16个比特。...记事本无论打开什么文件都按既定的字符编码工作(ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。...,所以说文本文件可读性好;而读写一个具体的二进制文件需要一个具体的文件解码器,所以说二进制文件可读性差,比如读BMP文件,必须用读图软件.而这里的存储转换时间应该是从编程的角度来说的,因为有些操作系统...windows需要对回车换行符进行转换(将”/n”,换成”/r/n”,所以文件读写时,操作系统需要一个一个字符的检查 当前字符是不是”/n”或”/r/n”).这个在存储转换在Linux操作系统并不需要...总地来说,从编程的角度来说,C中文本或二进制读写都是缓冲区与文件二进制流的交互,只是文本读写时有回车换行的转换.所以当写缓冲区无换行符”/n”(0AH),文本写与二进制写的结果一样的,同理,当文件不存在

    2.6K10

    Base-x 编码的奥秘

    何在不同邮件网关之间安全地传输控制字符、国际字符和二进制文件呢?作为 MIME(RFC 2045 和 RFC 3548)多媒体电子邮件标准的一部分的 Base64 编码就被开发出来了。...既然直接传输控制字符、国际字符和二进制文件容易造成原始信息在传递过程的错误,那么就把原始信息都转成 ASCII 的可打印字符,这样就能让旧系统安分点,不再胡乱改变其内容。...去掉了 Base64 的长相相近的字符,这样直观上就能分辨账户数字,:0(零)和O(大写 o),I(大写 i)和 l(小写l),以及 + 和 / (non-alphanumeric 非字母和数字组成的...图2 短除法计算十进制数各位上的数值 虽然上面的计算纯属画蛇添足,不过它对于理解二进制的短除法还是很有帮助的。...;Base58 比特币地址使用的编码方法,旨在提高地址的辨识度;Base32 用在一些对大小写不敏感的文件系统

    1.2K40
    领券