PHP中FTP相关函数小结
2018-09-08 01:04
本文实例讲述了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 ) or die ( Couldnt connect to $ftp_server ); if (@ftp_login ( $conn_id, $ftp_user, $ftp_pass )) { echo Connected as $ftp_user@$ftp_server\n; } else { echo Couldnt connect as $ftp_user\n; } ftp_pasv($conn_id, true); /** * 创建文件并写入内容 * * @param string $path path/ * @param string $fileName filename * @param string $data content * * @return string 返回路径 */ function createFile ($path, $fileName, $data) { if (empty($data)) { return false; } file_put_contents($path . $fileName, $data); return $path . $fileName; } /** * 创建目录 * * @param string $path path * * @return no */ function createFolder ($path) { if (! file_exists($path)) { createFolder(dirname($path)); if (mkdir($path, 0777)) { echo \n dir not find ,make dir . dirname($path) . is ok!; } else { echo \n dir not find ,make dir . dirname($path) . is fail!; } } } /** * 抓取电子书籍的类别 * * @param string $xmlUrl xml地址 * @param string $saveFileName 文件名称 * * @return string 返回路径 */ function getClassXml ($conn_id,$categoryDir, $saveFileName = category.xml) { //获取顶级栏目 $clist = getDirListFormFtp($conn_id, $categoryDir); $itemTPL = <Item><ID>%s</ID><Name>%s</Name></Item>; $items=; foreach ($clist as $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 ($clist as $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 ($_secondCateorylist as $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); /** * 抓取书籍章节信息 * * @param array $bookIds 书籍章节信息 * * @return boolean 返回是否抓取成功 */ function getBookofChapter ($bookinfo,$chapters) { if (! is_array($chapters)) { return false; } $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 ($chapters as $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); } return true; } function getBook($conn_id,$_bookListDir){ $chapter=array(); $buff = ftp_nlist ( $conn_id, $_bookListDir ); if(is_array($buff)){ $resourceArray = array(); foreach ($buff as $key=>$value){ if(strstr( $value, .txt )){ }else{ $resourcesName = str_replace($_bookListDir.\\, , $value); $temp = preg_split ( /\./,$resourcesName); $resourceArray[trim($temp[0])]=$resourcesName; } } foreach ($buff as $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(chapter index :.implode(array_keys ($chapter), ,)); echo \n; return $chapter; } function getDirListFormFtp($conn_id, $categoryDir) { $categoryArray = array (); $dirs = getDirNameFormFtp ( $conn_id, $categoryDir ); //获取分类描述 foreach ( $dirs as $key => $value ) { $path = $categoryDir . \\ . $value . .txt; $categoryArray [] = array (name => $value, detail => getFileContentsFormFtp ( $conn_id, $path ) ); } return $categoryArray; } function getFileContentsFormFtp($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(error timeout:-----); global $ftp_server; $conn_id = ftp_connect ( $ftp_server ); if (@ftp_login ( $conn_id, $ftp_user, $ftp_pass )) { echo Connected as $ftp_user@$ftp_server\n; } else { echo Couldnt connect as $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(file name :.$server_file.;content:.$content); return $content; } function getDirNameFormFtp($conn_id, $dirString) { $buff = ftp_rawlist ( $conn_id, $dirString ); $dirs = array_filter ( $buff, dirfilter ); foreach ( $dirs as $key => $value ) { $temp = preg_split ( /<DIR>/, $value ); $dirs [$key] = trim ( $temp [1] ); } asort($dirs , SORT_NUMERIC); return $dirs; } function dirfilter($var) { return (strstr ( $var, <DIR> )); } ftp_close ( $conn_id );
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP编码与转码操作技巧汇总》、《php面向对象程序设计入门教程》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php正则表达式用法总结》、及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。