パスに中国語が含まれている場合、PHP の解析が失敗する
路径中包含中文时,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"]."' width='400px' /><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))

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ログイン画面に「組織から PIN の変更を求められています」というメッセージが表示されます。これは、個人のデバイスを制御できる組織ベースのアカウント設定を使用しているコンピューターで PIN の有効期限の制限に達した場合に発生します。ただし、個人アカウントを使用して Windows をセットアップした場合、エラー メッセージは表示されないのが理想的です。常にそうとは限りませんが。エラーが発生したほとんどのユーザーは、個人アカウントを使用して報告します。私の組織が Windows 11 で PIN を変更するように要求するのはなぜですか?アカウントが組織に関連付けられている可能性があるため、主なアプローチはこれを確認することです。ドメイン管理者に問い合わせると解決できます。さらに、ローカル ポリシー設定が間違っていたり、レジストリ キーが間違っていたりすると、エラーが発生する可能性があります。今すぐ

Windows 11 では、新鮮でエレガントなデザインが前面に押し出されており、最新のインターフェイスにより、ウィンドウの境界線などの細部をカスタマイズして変更することができます。このガイドでは、Windows オペレーティング システムで自分のスタイルを反映した環境を作成するのに役立つ手順について説明します。ウィンドウの境界線の設定を変更するにはどうすればよいですか? + を押して設定アプリを開きます。 Windows [個人用設定] に移動し、[色の設定] をクリックします。ウィンドウの境界線の色の変更設定ウィンドウ 11" width="643" height="500" > [タイトル バーとウィンドウの境界線にアクセント カラーを表示する] オプションを見つけて、その横にあるスイッチを切り替えます。 [スタート] メニューとタスク バーにアクセント カラーを表示するにはスタート メニューとタスク バーにテーマの色を表示するには、[スタート メニューとタスク バーにテーマを表示] をオンにします。

デフォルトでは、Windows 11 のタイトル バーの色は、選択したダーク/ライト テーマによって異なります。ただし、任意の色に変更できます。このガイドでは、デスクトップ エクスペリエンスを変更し、視覚的に魅力的なものにするためにカスタマイズする 3 つの方法について、段階的な手順を説明します。アクティブなウィンドウと非アクティブなウィンドウのタイトル バーの色を変更することはできますか?はい、設定アプリを使用してアクティブなウィンドウのタイトル バーの色を変更したり、レジストリ エディターを使用して非アクティブなウィンドウのタイトル バーの色を変更したりできます。これらの手順を学習するには、次のセクションに進んでください。 Windows 11でタイトルバーの色を変更するにはどうすればよいですか? 1. 設定アプリを使用して + を押して設定ウィンドウを開きます。 Windows「個人用設定」に進み、

Windows インストーラー ページに「問題が発生しました」というメッセージとともに「OOBELANGUAGE」というメッセージが表示されますか?このようなエラーが原因で Windows のインストールが停止することがあります。 OOBE とは、すぐに使えるエクスペリエンスを意味します。エラー メッセージが示すように、これは OOBE 言語の選択に関連する問題です。心配する必要はありません。OOBE 画面自体から気の利いたレジストリ編集を行うことで、この問題を解決できます。クイックフィックス – 1. OOBE アプリの下部にある [再試行] ボタンをクリックします。これにより、問題が発生することなくプロセスが続行されます。 2. 電源ボタンを使用してシステムを強制的にシャットダウンします。システムの再起動後、OOBE が続行されます。 3. システムをインターネットから切断します。 OOBE のすべての側面をオフライン モードで完了する

タスクバーのサムネイルは楽しい場合もありますが、気が散ったり煩わしい場合もあります。この領域にマウスを移動する頻度を考えると、重要なウィンドウを誤って閉じてしまったことが何度かある可能性があります。もう 1 つの欠点は、より多くのシステム リソースを使用することです。そのため、リソース効率を高める方法を探している場合は、それを無効にする方法を説明します。ただし、ハードウェアの仕様が対応可能で、プレビューが気に入った場合は、有効にすることができます。 Windows 11でタスクバーのサムネイルプレビューを有効にする方法は? 1. 設定アプリを使用してキーをタップし、[設定] をクリックします。 Windows では、「システム」をクリックし、「バージョン情報」を選択します。 「システムの詳細設定」をクリックします。 [詳細設定] タブに移動し、[パフォーマンス] の下の [設定] を選択します。 「視覚効果」を選択します

Windows 11 のディスプレイ スケーリングに関しては、好みが人それぞれ異なります。大きなアイコンを好む人もいれば、小さなアイコンを好む人もいます。ただし、適切なスケーリングが重要であることには誰もが同意します。フォントのスケーリングが不十分であったり、画像が過度にスケーリングされたりすると、作業中の生産性が大幅に低下する可能性があるため、システムの機能を最大限に活用するためにカスタマイズする方法を知る必要があります。カスタム ズームの利点: これは、画面上のテキストを読むのが難しい人にとって便利な機能です。一度に画面上でより多くの情報を確認できるようになります。特定のモニターおよびアプリケーションにのみ適用するカスタム拡張プロファイルを作成できます。ローエンド ハードウェアのパフォーマンスの向上に役立ちます。画面上の内容をより詳細に制御できるようになります。 Windows 11の使用方法

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

画面の明るさは、最新のコンピューティング デバイスを使用する上で不可欠な部分であり、特に長時間画面を見る場合には重要です。目の疲れを軽減し、可読性を向上させ、コンテンツを簡単かつ効率的に表示するのに役立ちます。ただし、設定によっては、特に新しい UI が変更された Windows 11 では、明るさの管理が難しい場合があります。明るさの調整に問題がある場合は、Windows 11 で明るさを管理するすべての方法を次に示します。 Windows 11で明るさを変更する方法【10の方法を解説】 シングルモニターユーザーは、次の方法でWindows 11の明るさを調整できます。これには、ラップトップだけでなく、単一のモニターを使用するデスクトップ システムも含まれます。はじめましょう。方法 1: アクション センターを使用する アクション センターにアクセスできる
