这篇文章主要介绍了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 ) 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中FTP相關函數總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),