路径中包含中文时,PHP解析失败
<br /><?php <br />header("Content-Type: text/html; charset=utf-8");<br />//static $count=0;<br /><br />//抓包,识别ttx扩展名的文件,提取前100个字节,并插入数据库<br />function read100Bytes(&$extAndDir)<br />{<br /> $conn=new mysqli("localhost","root","cai123","test");<br /> if(mysqli_connect_errno())<br /> {<br /> die(mysqli_connect_error());<br /> }<br /> $conn->query("set names utf8");<br /> $sql="insert into spiderTXT(file_name,file_link,file_100_byte) values(?,?,?)";<br /> $stmt=$conn->prepare($sql);<br /> $stmt->bind_param("sss",$file_name,$file_link,$file_100_byte);<br /> <br /> <br /> $textFile=$extAndDir["text"];<br /><br /> foreach($textFile as $link)<br /> {<br /> if(strtolower(pathinfo($link)["extension"])=="txt")<br /> {<br /> if(file_exists($link) && is_readable($link))<br /> {<br /> $fd=fopen($link,"r") or die("打开文件失败".__line__);<br /> $content=fread($fd,100);<br /> //return $content;<br /> $file_name=pathinfo($link)["basename"];<br /> $file_link=pathinfo($link)["dirname"];<br /> $file_100_byte=$content;<br /> $stmt->execute();<br /> $stmt->close();<br /> fclose($fd);<br /> }<br /> else<br /> {<br /> die("文件不存在或者不可读".__line__);<br /> }<br /> <br /> }<br /> <br /> }<br /> <br /> <br /> <br /> $conn->close();<br />}<br />//根据扩展名分类<br />function extFilter(&$extAndDir,&$fileList,&$extFormat)<br />{<br /> $ext=$extAndDir[0];<br /> $link=$extAndDir[1];<br /> if(in_array(strtolower($ext),$extFormat["img"],true))<br /> {<br /> array_push($fileList["img"],$link);<br /> }<br /> else if(in_array(strtolower($ext),$extFormat["video"],true))<br /> {<br /> array_push($fileList["video"],$link);<br /> }<br /> else if(in_array(strtolower($ext),$extFormat["sound"],true))<br /> {<br /> array_push($fileList["sound"],$link);<br /> }<br /> else if(in_array(strtolower($ext),$extFormat["text"],true))<br /> {<br /> array_push($fileList["text"],$link);<br /> }<br /> else if(in_array(strtolower($ext),$extFormat["pack"],true))<br /> {<br /> array_push($fileList["pack"],$link);<br /> }<br /> else if(in_array(strtolower($ext),$extFormat["execute"],true))<br /> {<br /> array_push($fileList["execute"],$link);<br /> }<br /> else<br /> {<br /> array_push($fileList["other"],$link);<br /> }<br />}<br /><br />//提取路径名,因为使用dirname无法提取完整的路径名,所以写了这个<br />function getDirName($path)<br /> {<br /> $pat="#(\.\w{2,3})$#";<br /> //如果传的是路径+文件如 c:\sys.ini, 则提取路径名<br /> if(preg_match($pat,$path,$match))<br /> {<br /> //echo "extension name: ".$match[1];<br /> $pat2="#^(.*)/(\w{1,100}\.\w{2,3})$#i";<br /> if(preg_match($pat2, $path,$mat))<br /> {<br /> return $mat[1];<br /> }<br /> else<br /> {<br /> echo "not match".__line__."<br />";<br /> }<br /> }<br /> else<br /> {<br /> return $path;<br /> }<br /> }<br /> <br /><br />//读取路径,并根据文件的扩展名分类<br />function readFileList($path,&$extFormat)<br />{<br /> static $fileList=array("img"=>array(), "video"=>array(), "sound"=>array(),"text"=>array(),"pack"=>array(),"execute"=>array(),"other"=>array());<br /> $encoding=mb_detect_encoding($path,array("cp936","gbk" ,"gb2312", "utf-8","ISO-8859-1","ASCII"));<br /> //echo $encoding;<br /> //exit();<br /> //if (in_array($encoding,array("cp936","gbk" ,"gb2312"),true))<br /> //{<br /> $path=iconv($encoding,"utf-8",$path);<br /> //}<br /> <br /> $dirName=getDirName($path);<br /> //$dirName=dirname($path);<br /> <br /> //根据文件夹的名字,命名数组的关键字<br />/* $pat="#/(.+)$#i";<br /> preg_match($pat, $dirName,$match);<br /> $match=explode("/",$match[1]);<br /> $packs=array_pop($match);<br /> $fileList["$packs"]=null;<br />*/ <br /> if ($fd=opendir($dirName))<br /> {<br /> while($fileName=readdir($fd))<br /> {<br /> $encoding=mb_detect_encoding($fileName,array("cp936","gbk" ,"gb2312", "utf-8","ISO-8859-1","ASCII"));<br /> //echo $encoding;<br /> //exit();<br /> //if (in_array($encoding,array("cp936","gbk" ,"gb2312"),true))<br /> //{<br /> $fileName=iconv($encoding,"utf-8",$fileName);<br /> //}<br /> <br /> if($fileName !="." && $fileName !="..")<br /> {<br /> <br /> if(is_file($dirName.'/'.$fileName))<br /> { <br /> @$extName=pathinfo($path."/".$fileName)["extension"];<br /> $linkName=$dirName."/".$fileName;<br /> <br /> $extAndDir=array($extName,$linkName);<br /> extFilter($extAndDir,$fileList,$extFormat);<br /> //read100Bytes($extAndDir);<br /> <br /> }<br /> else if(is_dir($dirName.'/'.$fileName))<br /> {<br /> //$fileName=iconv("gb2312","utf-8",$fileName);<br /> readFileList($dirName.'/'.$fileName,$extFormat);<br /> //echo $dirName.'/'.$fileName."<br />";<br /> //die("读取目录出错");<br /> }<br /> } <br /> <br /> }<br /> return $fileList;<br /> }<br /> @closedir($fd);<br />}<br />//迭代数据<br />function iter(&$arr)<br />{<br /> if(!is_array($arr))<br /> return;<br /> //$num=count($arr);<br /> $list=array();<br /> //echo "length".$num;<br /> foreach($arr as $name=>$val)<br /> {<br /> foreach($val as $item)<br /> array_push($list,$item);<br /> }<br /> return $list;<br />}<br /><br />//组装批量插入数据<br />function mysqliInsert(&$arr)<br />{<br /> $conn= new MySQLi("localhost", "root", "cai123", "test");<br /> if(!$conn)<br /> {<br /> die("连接服务器失败".$conn->error);<br /> }<br /> $conn->query("set names utf8");<br /> $sql="INSERT INTO img(link) VALUES";<br /> foreach ($arr as $key=>$val)<br /> {<br /> foreach($val as $ads)<br /> {<br /> $sql .= "('".$ads."'),";<br /> <br /> }<br /> }<br /> //去掉最后一个逗号,<br /> $sql=substr($sql,0, strlen($sql)-1);<br /> //echo $sql;<br /> <br /> $res = $conn->query($sql);<br /> <br /> if(!$res)<br /> {<br /> die("插入数据库失败".$conn->error);<br /> }<br /> else<br /> {<br /> if($conn->affected_rows>0)<br /> {<br /> exit();<br /> }<br /> else<br /> {<br /> die("没有产生影响");<br /> }<br /> }<br /> $conn->close();<br /> <br />}<br />//预处理批量插入数据<br />function stmtInsert(&$arr)<br />{<br /> $conn= new mysqli("localhost", "root", "cai123", "test");<br /> if(mysqli_connect_errno())<br /> {<br /> die(mysqli_connect_error());<br /> }<br /> $conn->query("set names utf8");<br /> $sql="insert into img(link) values(?)";<br /> $stmt=$conn->prepare($sql);<br /> $stmt->bind_param("s",$items);<br /> <br /> foreach($arr as $key=>$links)<br /> {<br /> foreach ($links as $item)<br /> {<br /> $items=$item;<br /> $b=$stmt->execute();<br /> if(!$b)<br /> {<br /> die($conn->error); <br /> }<br /> }<br /> }<br /> $stmt->close();<br /> $conn->close();<br />}<br />//<br />function showFile()<br />{<br /> $conn= new MySQLi("localhost", "root", "cai123", "test");<br /> if(!$conn)<br /> {<br /> die("连接服务器失败".$conn->error);<br /> }<br /> $conn->query("set names utf8");<br /> $sql=" SELECT * FROM img GROUP BY link";<br /> $res=$conn->query($sql);<br /> if(!$res)<br /> {<br /> die("查询失败");<br /> }<br /> while($row=$res->fetch_assoc())<br /> {<br /> echo "<img src='".$row["link"]."' style="max-width:90%" / alt="路径中包含汉语言时,PHP解析失败" ><br />";<br /> }<br /> $res->free();<br />}<br /><br />//转换window环境下路径的默认分隔符\为PHP识别更好的/<br />function transPathSep($path)<br />{<br /> //$encoding=mb_detect_encoding($path,array("cp936","gbk" ,"gb2312", "utf-8","ISO-8859-1","ASCII"));<br /> //$path=iconv($encoding,"utf-8",$path);<br /> <br /> $system=$_SERVER["SERVER_SOFTWARE"];<br /> $pat="#\((.*?)\)#";<br /> $sysVer=null;<br /> if(preg_match($pat,$system,$match))<br /> {<br /> $sysVer=$match[1];<br /> }<br /> else<br /> {<br /> die("匹配系统类型失败");<br /> }<br /> if(strtolower($sysVer)=="win32")<br /> {<br /> $realPath=str_replace("\\","/",$path);<br /> return $realPath;<br /> }<br />}<br /><br />//static $fileList=array("img"=>array(), "video"=>array(), "sound"=>array(),"text"=>array(),"pack"=>array());<br />//在此处可以决定把什么类型的文件,归类到哪种类型<br />$imgFormat=array("img"=>array("jpg", "jpeg","png", "bmp","gif","ico"),<br /> "video"=>array("avi","dvix","div","xvid","mpge","mpg","dat","wmv","asx","rm","rmvb","mov","qt","3gp","3g2","mp4","m4v","flv"),<br /> "sound"=>array("mp3","wav","wma","ape","mod","aiff","voc","vov","asf"),<br /> "text"=>array("word","txt","pdf","chm","ppt","ini","html","css","js"),<br /> "pack"=>array("rar" ,"zip","7z","cab","arj","lzh","tar","gz","ace","uue","bz2","jar","iso","mpq"),<br /> "execute"=>array("exe","bat","msi"));<br /> <br /> <br /> <br />/* 遇到一个问题,当路径中出现中文时,会提示打开目录失败,且显示为乱码,比如$dir="E:\Books\php\php 程序设计";时会出现,CSDN的可用分只有33了..............蛋疼<br />*/<br />$dir="C:\Windows\Boot";<br /><br />$path=transPathSep($dir);<br /><br /> //echo pathinfo($path)["dirname"];<br />$arr=readFileList($path,$imgFormat);<br /><br />echo "<pre class="brush:php;toolbar:false">";<br />print_r($arr);<br />echo "";
//read100Bytes($arr);
echo "
OK";
?>
------解决思路----------------------
你这样能不出错吗?
while($fileName=readdir($fd))
{
$encoding=mb_detect_encoding($fileName,array("cp936","gbk" ,"gb2312", "utf-8","ISO-8859-1","ASCII"));
$fileName=iconv($encoding,"utf-8",$fileName); //非utf-8的文件名被转成了utf-8的,那么文件还能存在吗?
if($fileName !="." && $fileName !="..")
{
if(is_file($dirName.'/'.$fileName))

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
