php将两个单字节组成一个双字节

2017年3月16日 评论已被关闭

比如0×12和0×34这两个字节如果要组成一个双字节,则可以使用unpack的S格式化字符来实现,代码如下:

<?php
$data = unpack("S", pack("H*", "3412"));
print_r($data);
echo '0x' . dechex($data[1]) . "\n";

/*
Array
(
    [1] => 4660
)
0×1234
*/

因为是小端序,所以要写成"3421"。其实还可以用位运算的方式来实现。这个时候就不需要考虑字节序了,因为字节序只是存储时才需要考虑的问题,对于输出来说,是按照我们自然的方式:

<?php
print "0x" . dechex((0x12 << 8 ) | 0x34) . "\n";

/*
0x1234
*/

参考资料
PHP: chr和pack、unpack那些事

https://my.oschina.net/goal/blog/202378

分类: php 标签:

php判断大端序和小端序的方法

2017年3月16日 评论已被关闭

L表示无符号长整型,按主机字节序。N表示无符号长整型,大端序。它们都是32位的,所以如果用L和N对同一个整数进行打包,如果结果相等,则本机字节序就是大端序,否则就是小端序。代码如下:
<?php
define('BIG_ENDIAN', pack('L', 1) === pack('N', 1));

if (BIG_ENDIAN)
{
    echo "大端序";
}
else
{
    echo "小端序";
}

echo "\n";

参考资料
PHP: pack/unpack补遗
https://my.oschina.net/goal/blog/202381

PHP pack() format for signed 32 int – big endian

http://stackoverflow.com/questions/16039751/php-pack-format-for-signed-32-int-big-endian

分类: php 标签:

php字符串长度计算

2017年3月16日 评论已被关闭

当在处理字符时,如果字节小于0×80,则把它当作单字节来处理,否则会继续读取下一个字节,这通常跟编码有关,GBK会将2个字节当成一个字符来处理,UTF8则需要3个字节。有时候在PHP中需要做类似的处理,比如计算字符串中字符的个数(字符串可能包含单字节和多字节),strlen方法只能计算字节数,而mb_strlen需要开启扩展。类似这样的需求,其实很容易处理:

<?php
function mbstrlen($str)
{
    $len = strlen($str);
    
    if ($len <= 0)
    {
        return 0;
    }
    
    $count  = 0;
    
    for ($i = 0; $i < $len; $i++)
    {
        $count++;
        if (ord($str{$i}) >= 0×80)
        {
            $i += 2;
        }
    }
    
    return $count;
}

echo "output: " . mbstrlen("中国so强大!") . "\n";

?>

以上代码的实现就是利用单字节字符的ASCII码小于0×80。至于要跳过几个字节,这要看具体是什么编码.

参考资料:

PHP: 深入pack/unpack

https://my.oschina.net/goal/blog/195749

分类: php 标签:

PHP、Nginx、Apache中禁止网页被iframe引用的方法

2016年12月8日 评论已被关闭

这篇文章主要介绍了PHP、Nginx、Apache中禁止网页被iframe引用的方法,使用X-Frame-Options实现,需要的朋友可以参考下

可以使用php或nginx等添加X-Frame-Options header来控制frame权限
X-Frame-Options有三个可选的值:

DENY:浏览器拒绝当前页面加载任何Frame页面
SAMEORIGIN:frame页面的地址只能为同源域名下的页面
ALLOW-FROM:允许frame加载的页面地址

PHP代码:
代码如下:
header('X-Frame-Options:Deny');

Nginx配置:
代码如下:
add_header X-Frame-Options SAMEORIGIN

可以加在locaion中
代码如下:
location /
{
  add_header X-Frame-Options SAMEORIGIN
}

Apache配置:
代码如下:

Header always append X-Frame-Options SAMEORIGIN

使用后不充许frame的页面会显示一个白板。

参考:

https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options?redirectlocale=en-US&redirectslug=The_X-FRAME-OPTIONS_response_header

分类: php 标签:

Apache服务器启用了TRACE Method如何关闭?

2016年11月24日 评论已被关闭

360检查出漏洞:服务器启用了TRACE Method。建议:禁用TRACE方法。那么如何禁用呢。

TRACE和TRACK是用来调试web服务器连接的HTTP方式。支持该方式的服务器存在跨站脚本漏洞,通常在描述各种浏览器缺陷的时候,把"Cross-Site-Tracing"简称为XST。攻击者可以利用此漏洞欺骗合法用户并得到他们的私人信息。

如何关闭Apache的TRACE请求

方法1. 虚拟主机用户可以在.htaccess文件中添加如下代码过滤TRACE请求:

RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* – [F]

方法2. 服务器用户在httpd.conf尾部添加如下指令后重启apache即可:

TraceEnable off

如果是自己的服务器,可以轻松设置,如果是购买的虚拟主机,你可以找idc服务商让他们帮你关闭,一般他们会建议你使用第一种办法。

分类: php 标签:


标签

ajax apache array array_slice CentOS checkbox composer cookie csv date DATE_FORMAT excel FCKEditor file_get_contents laravel Magento Certified Developer mb_substr memcache Memcached MySQL String Functions Netbeans openssl pack php面试题 preg_match_all preg_replace QQ登录 rewrite SaeStorage serialize session setTimeout Sphinx spl Storage strtotime ueditor vsftp vsftpd Zend zip 分割字符串 图片处理 新浪云 正则表达式

存档