雖然程序員無時無刻都在造輪子,但造輪子也有效率之分,用好輪子才能造出好「🚗」php
composer require guzzlehttp/guzzle
你能夠用guzzlehttp徹底取代curl,file_get_content,fopen等函數。這個擴展包使用起來極爲順手。咱們在代碼量上看下對比。程序員
<?php //初始化 $curl = curl_init(); //設置抓取的url curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); //設置頭文件的信息做爲數據流輸出 curl_setopt($curl, CURLOPT_HEADER, 1); //設置獲取的信息以文件流的形式返回,而不是直接輸出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //設置post方式提交 curl_setopt($curl, CURLOPT_POST, 1); //設置post數據 $post_data = array( "username" => "coder", "password" => "12345" ); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); //執行命令 $data = curl_exec($curl); //關閉URL請求 curl_close($curl); //顯示得到的數據 print_r($data);
use GuzzleHttp\Client; $client = new GuzzleHttp\Client(); $response = $client->request('POST', 'http://www.baidu.com', [ 'form_params' => [ 'username' => 'coder', 'password' => '12345' ] ]); print_r($response);
composer require jenssegers/date
使用這個擴展包,讓php程序員對date相關的需求實現更簡潔、簡單了。請看下方對比composer
date("Ym", strtotime("-1 day")); //獲取前一天的日期 date("Ym", strtotime("+1 day")); //獲取後一天的日期
(new Date('-1 day'))->format ('Ym'); // 獲取前一天的日期 (new Date('+1 day'))->format ('Ym'); //獲取後一天的日期
顯而易見,新的方法對date的處理呈現更加直觀。固然這是簡單的應用,複雜的日期計算中,它會更顯優點。curl
composer require chumper/zipper
使用這個包能夠簡化php自己zip函數使用的複雜度
<?php $resource = zip_open($filename); while($zip = zip_read($resource)) { if(zip_entry_open($resource, $zip)) { $file_content = zip_entry_name($zip); $file_name = substr($file_content, strrpos($file_content, '/') +1); if(!is_dir($file_name) && $file_name) { $save_path = $dir .'/'. $file_name; if(file_exists($save_path)) { echo '文件夾內已存在文件 "' . $file_name . '" <pre />'; }else { echo $file_name . '<pre />'; $file_size = zip_entry_filesize($zip); $file = zip_entry_read($zip, $file_size); file_put_contents($save_path, $file); zip_entry_close($zip); } } } } zip_close($resource);
Zipper::make('test.zip')->folder('test')->extractTo('foo');
顯而易見,我想我不用去解釋什麼了。函數
composer require anchu/ftp
本包能夠簡化php自身ftp上傳代碼的流程
<?php $host = '10.0.0.42'; $user = 'uftp'; $pwd = 'uftp'; // 進行ftp鏈接,根據port是否設置,傳遞的參數會不一樣 if(empty($port)){ $f_conn = ftp_connect($host); }else{ $f_conn = ftp_connect($host, $port); } if(!$f_conn){ echo "connect fail\n"; exit(1); } echo "connect success\n"; // 進行ftp登陸,使用給定的ftp登陸用戶名和密碼進行login $f_login = ftp_login($f_conn,$user,$pwd); if(!$f_login){ echo "login fail\n"; exit(1); } echo "login success\n"; // 獲取當前所在的ftp目錄 $in_dir = ftp_pwd($f_conn); if(!$in_dir){ echo "get dir info fail\n"; exit(1); } echo "$in_dir\n"; // 獲取當前所在ftp目錄下包含的目錄與文件 $exist_dir = ftp_nlist($f_conn, ftp_pwd($f_conn)); print_r($exist_dir); // 要求是按照日期在ftp目錄下建立文件夾做爲文件上傳存放目錄 echo date("Ymd")."\n"; $dir_name = date("Ymd"); // 檢查ftp目錄下是否已存在當前日期的文件夾,如不存在則進行建立 if(!in_array("$in_dir/$dir_name", $exist_dir)){ if(!ftp_mkdir($f_conn, $dir_name)){ echo "mkdir fail\n"; exit(1); }else{ echo "mkdir $dir_name success\n"; } } // 切換目錄 if(!ftp_chdir($f_conn, $dir_name)){ echo "chdir fail\n"; exit(1); }else{ echo "chdir $dir_name success\n"; } // 進行文件上傳 $result = ftp_put($f_conn, 'bbb.mp3', '/root/liang/ftp/bbb.mp3', FTP_BINARY); if(!$result){ echo "upload file fail\n"; exit(1); }else{ echo "upload file success\n"; exit(0); }
Config::set('ftp.connections.key', array( 'host' => '', 'username' => '', 'password' => '', 'passive' => false, 'secure' => false, )); FTP::uploadFile($fileFrom,$fileTo,$mode)
感謝你看到這裏,但願本篇文章能夠幫助到你。post
向這些具備開源精神的工程師致敬ui