php连续判断连接符,PHP 判断给定文件名是否为一个符号连接

A workaround for Windows LNK files:

{

if(is_link($filename))

returntrue;$ext=substr(strrchr($filename,'.'),1);

if(strtolower($ext) =='lnk')

{

return (_readlink($filename) ?true:false);

}

returnfalse;

}

function_readlink($file)

{

if(file_exists($file))

{

if(is_link($file))

{

returnreadlink($file);

}// Get file content$handle=fopen($file,"rb");$buffer= array();

while(!feof($handle))

{$buffer[] =fread($handle,1);

}fclose($handle);// Test magic value and GUIDif(count($buffer) <20)

returnfalse;

if($buffer[0] !='L')

returnfalse;

if((ord($buffer[4]) !=0x01) ||

(ord($buffer[5]) !=0x14) ||

(ord($buffer[6]) !=0x02) ||

(ord($buffer[7]) !=0x00) ||

(ord($buffer[8]) !=0x00) ||

(ord($buffer[9]) !=0x00) ||

(ord($buffer[10]) !=0x00) ||

(ord($buffer[11]) !=0x00) ||

(ord($buffer[12]) !=0xC0) ||

(ord($buffer[13]) !=0x00) ||

(ord($buffer[14]) !=0x00) ||

(ord($buffer[15]) !=0x00) ||

(ord($buffer[16]) !=0x00) ||

(ord($buffer[17]) !=0x00) ||

(ord($buffer[18]) !=0x00) ||

(ord($buffer[19]) !=0x46))

{

returnfalse;

}$i=20;

if(count($buffer) 

returnfalse;$flags=ord($buffer[$i]);$flags=$flags| (ord($buffer[++$i]) <<8);$flags=$flags| (ord($buffer[++$i]) <<16);$flags=$flags| (ord($buffer[++$i]) <<24);$hasShellItemIdList= ($flags&0x00000001) ?true:false;$pointsToFileOrDir= ($flags&0x00000002) ?true:false;

if(!$pointsToFileOrDir)

returnfalse;

if($hasShellItemIdList)

{$i=76;

if(count($buffer) 

returnfalse;$a=ord($buffer[$i]);$a=$a| (ord($buffer[++$i]) <<8);

}$i=78+4+$a;

if(count($buffer) 

returnfalse;$b=ord($buffer[$i]);$b=$b| (ord($buffer[++$i]) <<8);$b=$b| (ord($buffer[++$i]) <<16);$b=$b| (ord($buffer[++$i]) <<24);$i=78+$a+$b;

if(count($buffer) 

returnfalse;$c=ord($buffer[$i]);$c=$c| (ord($buffer[++$i]) <<8);$c=$c| (ord($buffer[++$i]) <<16);$c=$c| (ord($buffer[++$i]) <<24);$i=78+$a+$b+$c;

if(count($buffer) 

returnfalse;$linkedTarget="";

for(;$i

{

if(!ord($buffer[$i]))

break;$linkedTarget.=$buffer[$i];

}

if(empty($linkedTarget))

returnfalse;

return$linkedTarget;

}

returnfalse;

}

if(_is_link('test.lnk'))

{

echo_readlink('test.lnk');

}?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值