PHP中FTP相关函数小结
本文实例讲述了PHP中FTP相关函数。分享给大家供大家参考,具体如下:
<?php
set_time_limit(0);
//转存本地地址
define(
'STORE_PATH',
dirname(__FILE__).'/../../../../temp_data/test/'
);
define('LIST_PATH',STORE_PATH.'list/');
define('CHAPTER_PATH',LIST_PATH.'chapter/');
define('DETAIL_PATH',LIST_PATH.'detail/');
createFolder(STORE_PATH);
createFolder(LIST_PATH);
createFolder(CHAPTER_PATH);
createFolder(DETAIL_PATH);
$ftp_server="ip";
$ftp_user="anonymous";
$ftp_pass="anonymous";
$conn_id=ftp_connect($ftp_server)ordie("Couldn'tconnectto$ftp_server");
if(@ftp_login($conn_id,$ftp_user,$ftp_pass)){
echo"Connectedas$ftp_user@$ftp_server\n";
}else{
echo"Couldn'tconnectas$ftp_user\n";
}
ftp_pasv($conn_id,true);
/**
*创建文件并写入内容
*
*@paramstring$pathpath/
*@paramstring$fileNamefilename
*@paramstring$datacontent
*
*@returnstring返回路径
*/
functioncreateFile($path,$fileName,$data)
{
if(empty($data)){
returnfalse;
}
file_put_contents($path.$fileName,$data);
return$path.$fileName;
}
/**
*创建目录
*
*@paramstring$pathpath
*
*@returnno
*/
functioncreateFolder($path)
{
if(!file_exists($path)){
createFolder(dirname($path));
if(mkdir($path,0777)){
echo"\ndirnotfind,makedir".dirname($path)."isok!";
}else{
echo"\ndirnotfind,makedir".dirname($path)."isfail!";
}
}
}
/**
*抓取电子书籍的类别
*
*@paramstring$xmlUrlxml地址
*@paramstring$saveFileName文件名称
*
*@returnstring返回路径
*/
functiongetClassXml($conn_id,$categoryDir,$saveFileName='category.xml')
{
//获取顶级栏目
$clist=getDirListFormFtp($conn_id,$categoryDir);
$itemTPL='<Item><ID>%s</ID><Name>%s</Name></Item>';
$items='';
foreach($clistas$key=>$value){
$items.=sprintf($itemTPL,$value['name'],$value['detail']);
}
$bodyTPL='<Tofo><Class>%s</Class></Tofo>';
$data=sprintf($bodyTPL,$items);
echo"\n".createFile(STORE_PATH,$saveFileName,$data);
}
set_time_limit(0);
$start_time=time();
$bookCache=array();
$categoryDir="\\tingshu\\web";
getClassXml($conn_id,$categoryDir);
//获取顶级栏目
$clist=getDirListFormFtp($conn_id,$categoryDir);
//获取二级栏目分类
foreach($clistas$key=>$value){
$_secondCateoryDir=$categoryDir.'\\'.$value['name'];
$_secondCateorylist=getDirListFormFtp($conn_id,$_secondCateoryDir);
$listData='';
$listTPL='<Tofo><Class><ID>%s</ID><Name>%s</Name><Books>%s</Books></Class></Tofo>';
$items='<Item><ID>%s</ID><Name>%s</Name></Item>';
$listItemString='';
//获取详细书籍章节列表
foreach($_secondCateorylistas$key=>$book){
$listItemString.=sprintf($items,$book['name'],$book['detail']);
$_bookListDir=$_secondCateoryDir.'\\'.$book['name'];
$chapters=getBook($conn_id,$_bookListDir);
//生产book章节html
getBookofChapter($book,$chapters);
//缓存bookid和章节信息
$bookCache[$book['name']]=array('category'=>$value['name'],'chapters'=>$chapters);
}
//生成二级栏目列表页
$listData=sprintf($listTPL,$value['name'],$value['detail'],$listItemString);
$list_save_path=$value['name'].'.xml';
echo"\n".createFile(LIST_PATH,$list_save_path,$listData);
}
$arrString="<?php\n\$bookCache=".var_export($bookCache,true).";\n?>";
echo"\n建立缓存文件:".createFile(STORE_PATH,'bookcache.php',$arrString);
/**
*抓取书籍章节信息
*
*@paramarray$bookIds书籍章节信息
*
*@returnboolean返回是否抓取成功
*/
functiongetBookofChapter($bookinfo,$chapters)
{
if(!is_array($chapters)){
returnfalse;
}
$bookData='';
$bookTPL='<Tofo><Books><ID>%s</ID><Name>%s</Name><Volumes>%s</Volumes></Books></Tofo>';
$bookItemTPL='<Item><ID>%s</ID><Name>%s</Name></Item>';
//<Play>%s</Play>
//<Download>%s</Download>
//,$item['downurl'],$item['downurl']
$chapterString='';
foreach($chaptersas$key=>$item){
$chapterString.=sprintf($bookItemTPL,$item['name'],$item['detail']);
}
//生成二级栏目列表页
$bookData=sprintf($bookTPL,$bookinfo['name'],$bookinfo['detail'],$chapterString);
$book_chapter_save_path=$bookinfo['name'].'.xml';
if(!empty($bookData)){
echo"\n".createFile(CHAPTER_PATH,$book_chapter_save_path,$bookData);
}
returntrue;
}
functiongetBook($conn_id,$_bookListDir){
$chapter=array();
$buff=ftp_nlist($conn_id,$_bookListDir);
if(is_array($buff)){
$resourceArray=array();
foreach($buffas$key=>$value){
if(strstr($value,'.txt')){
}else{
$resourcesName=str_replace($_bookListDir.'\\',"",$value);
$temp=preg_split('/\./',$resourcesName);
$resourceArray[trim($temp[0])]=$resourcesName;
}
}
foreach($buffas$key=>$value){
if(strstr($value,'.txt')){
$name=trim(str_replace(".txt","",str_replace($_bookListDir.'\\',"",$value)));
$chapter[$name]=array(
'name'=>$name,
'detail'=>getFileContentsFormFtp($conn_id,$value),
'downurl'=>$resourceArray[$name]
);
}
}
}
ksort($chapter,SORT_NUMERIC);
echo"\n";
var_dump('chapterindex:'.implode(array_keys($chapter),','));
echo"\n";
return$chapter;
}
functiongetDirListFormFtp($conn_id,$categoryDir){
$categoryArray=array();
$dirs=getDirNameFormFtp($conn_id,$categoryDir);
//获取分类描述
foreach($dirsas$key=>$value){
$path=$categoryDir.'\\'.$value.'.txt';
$categoryArray[]=array('name'=>$value,'detail'=>getFileContentsFormFtp($conn_id,$path));
}
return$categoryArray;
}
functiongetFileContentsFormFtp($conn_id,$server_file){
$_tempFileName=STORE_PATH.'temp.tmp';
$content='';
try{
if(ftp_get($conn_id,$_tempFileName,$server_file,FTP_ASCII)){
$content=file_get_contents($_tempFileName);
}
}catch(Exception$e){
var_dump('errortimeout:-----');
global$ftp_server;
$conn_id=ftp_connect($ftp_server);
if(@ftp_login($conn_id,$ftp_user,$ftp_pass)){
echo"Connectedas$ftp_user@$ftp_server\n";
}else{
echo"Couldn'tconnectas$ftp_user\n";
}
ftp_pasv($conn_id,true);
if(ftp_get($conn_id,$_tempFileName,$server_file,FTP_ASCII)){
$content=file_get_contents($_tempFileName);
}
}
$content=iconv("GBK","UTF-8//IGNORE",trim($content));
echo"\n";
var_dump('filename:'.$server_file.';content:'.$content);
return$content;
}
functiongetDirNameFormFtp($conn_id,$dirString){
$buff=ftp_rawlist($conn_id,$dirString);
$dirs=array_filter($buff,"dirfilter");
foreach($dirsas$key=>$value){
$temp=preg_split('/<DIR>/',$value);
$dirs[$key]=trim($temp[1]);
}
asort($dirs,SORT_NUMERIC);
return$dirs;
}
functiondirfilter($var){
return(strstr($var,'<DIR>'));
}
ftp_close($conn_id);
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP编码与转码操作技巧汇总》、《php面向对象程序设计入门教程》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php正则表达式用法总结》、及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。