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将数据库导出成excel的方法
May 07 PHP
PHP foreach循环使用详解与实例代码
May 08 PHP
PHP变量内存分配问题记录整理
Nov 27 PHP
php获取网页请求状态程序示例
Jun 17 PHP
ThinkPHP3.1查询语言详解
Jun 19 PHP
PHP中的日期加减方法示例
Aug 21 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
PHP命名空间namespace的定义方法详解
Mar 29 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 PHP
浅析PHP数据导出知识点
Feb 17 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
实用函数2
2007/11/08 PHP
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
PHP安全配置详细说明
2011/09/26 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
Python快速查找list中相同部分的方法
2018/06/27 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
暑假实习求职信范文
2013/09/22 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
认购协议书范本
2014/04/22 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
聚会通知怎么写
2015/04/23 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
捐款仪式主持词
2015/07/04 职场文书
浅谈Python协程asyncio
2021/06/20 Python
如何利用golang运用mysql数据库
2022/03/13 Golang
python blinker 信号库
2022/05/04 Python