PHP中FTP相关函数小结


Posted in PHP onJuly 15, 2016

本文实例讲述了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 ( "Couldn't connect to $ftp_server" );
if (@ftp_login ( $conn_id, $ftp_user, $ftp_pass )) {
echo "Connected as $ftp_user@$ftp_server\n";
} else {
echo "Couldn't 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 "Couldn't 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中的类-什么叫类
Nov 20 PHP
How do I change MySQL timezone?
Mar 26 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 PHP
php实现的zip文件内容比较类
Sep 24 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
php批量删除操作代码分享
Feb 26 PHP
Yii框架模拟组件调用注入示例
Nov 11 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 #PHP
Yii控制器中filter过滤器用法分析
Jul 15 #PHP
Yii编程开发常见调用技巧集锦
Jul 15 #PHP
如何正确配置Nginx + PHP
Jul 15 #PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 #PHP
Yii列表定义与使用分页方法小结(3种方法)
Jul 15 #PHP
session 加入redis的实现代码
Jul 15 #PHP
You might like
笑谈配置,使用Smarty技术
2007/01/04 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
Python生成随机密码
2015/03/10 Python
Django的信号机制详解
2017/05/05 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
python学习教程之使用py2exe打包
2017/09/24 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
详解如何设置Python环境变量?
2019/05/13 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
python Xpath语法的使用
2020/11/26 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
精通CAD能手自荐书
2014/01/31 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
民族学专业求职信
2014/07/28 职场文书
个人借款协议书范本
2014/11/17 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书