1. 程式人生 > >【php】PHP中file_get_contents()與file_put_contents()函式細節詳解

【php】PHP中file_get_contents()與file_put_contents()函式細節詳解

file_get_contents函式

一般的也就是使用file_get_contents($url),但是關於這個函式還有很多沒有注意到的地方。

先看關於手冊:

file_get_contents(path,include_path,context,start,max_length)

引數

描述

path

必需。規定要讀取的檔案。

include_path

可選。如果也想在 include_path 中搜尋檔案的話,可以將該引數設為 “1″。

context

可選。規定檔案控制代碼的環境。

context 是一套可以修改流的行為的選項。若使用 null,則忽略。

start

可選。規定在檔案中開始讀取的位置。該引數是 PHP 5.1 新加的。

max_length

可選。規定讀取的位元組數。該引數是 PHP 5.1 新加的。

——————-可以選擇讀取檔案位置和長度這個選項不錯。但是關於context的選項是做什麼用的呢?

強大的context——stream_context_create

context 就是文字流的意思。而在php中建立文字流的函式是:stream_context_create

stream_context_create是用來建立開啟檔案的上下檔案選項的,比如用POST訪問,使用代理,傳送header等。看到沒有之前用curl實現的所謂代理,post,header方法都可以使用file_get_contents+stream_context_create來實現。

之前在《PHP批量採集下載美女圖片》中抱怨file_get_contents採集圖片時候經常會遇到慢資源造成cpu負載過高,不能設定超時時間,最後使用curl來實現,其實file_get_contents也可以設定超時時間。

file_get_contents超時設定

1 $opts = array('http'=>array('timeout'=>10));
2 $context = stream_context_create($opts);
3
echo file_get_contents($url,false,$context);

這樣就可以實現設定10s的超時時間

更強大的file_get_contents

file_get_contents實現post

參看官方手冊的例子

1 $opts = array('http' =>
2 array(
3 'method'  => 'POST',
4 'header'  => "Content-Type: text/xmlrn".
5 "Authorization: Basic ".base64_encode("$https_user:$https_password")."rn",

相關推薦

phpPHPfile_get_contents()file_put_contents()函式細節

file_get_contents函式 一般的也就是使用file_get_contents($url),但是關於這個函式還有很多沒有注意到的地方。 先看關於手冊: file_get_contents(path,include_path,context,s

android開發學習 ------- android的單例模式 (

lan post tail -- and 使用 href details android開發 https://blog.csdn.net/u011418943/article/details/60139644 這篇文章 前因後果 都說出來了 ,值得學習。 htt

知識UML類圖類的關係

在畫類圖的時候,理清類和類之間的關係是重點。類的關係有泛化(Generalization)、實現(Realization)、依賴(Dependency)和關聯(Association)。其中關聯又分為一般關聯關係和聚合關係(Aggregation),合成關係(Composition)。下面我們結合例項理解這

重構AndroidStudio程式碼重構選單Refactor功能

       程式碼重構幾乎是每個程式設計師在軟體開發中必須要不斷去做的事情,以此來不斷提高程式碼的質量。Android Stido(以下簡稱AS)以其強大的功能,成為當下Android開發工程師最受歡迎的開發工具,也是Android官方推薦使用的工具。如此優秀的工具,

mysqldate_adddate_sub函式使用

           mysql中date_add與date_sub函式使用詳解   轉載:http://www.111cn.net/database/mysql/52936.htm 在mysql中date_a

C#FuncAction的理解

.net ring UNC 簡單 代碼 操作 不必要 返回值 tps 原文地址:https://www.cnblogs.com/ultimateWorld/p/5608122.html Action 與 Func是.NET類庫中增加的內置委托,以便更加簡潔方便的使用委托。最

C++C++intstring的相互轉換

一、int轉string 1.c++11標準增加了全域性函式std::to_string: string to_string (int val); string to_string (long val); string to_string (long long val); string to_str

C++C++constconstexpr的比較

先說結論相同點:const和consexpr都是用來定義常量的。不同點:const宣告的常量,初始值引用的物件不一定是一個常量;constexpr宣告的常量,初始值一定是常量表達式。   constexpr是c++11標準新增的關鍵字。   之所以說const宣告的常量,初始值不一

轉載VirtualBox實現主機檔案的共享

VirtualBox是一款開源的虛擬機器軟體,可以在Linux/Mac和Windows主機中執行。支援在虛擬機器中安裝全系列Windows操作 系統(如Win2000、XP、Vista、Windosw 7)。在VirtualBox虛擬機器中安裝作業系統並不複雜,如同在真實電腦

STLstringc_str()、data()函式的用法

標準庫的string類提供了3個成員函式來從一個string得到c型別的字元陣列:c_str()、data()、copy(p,n)。1. c_str():生成一個const char*指標,指向以空字元終止的陣列。注: ①這個陣列的資料是臨時的,當有一個改變這些資料的成員函

mysql-- mysqlMAX()和MIN()函式的使用之字串大小的比較

  在維護別人的程式碼時,需求是對課程成績進行統計分析,並以柱狀圖的形式展現出來,需要表明該科成績的最高分和最低分。遇到一個問題就是,查出的結果很明顯不是最高和最低分。   使用的函式是MAX()和M

Php-SPL庫的觀察者模式介面

PHP-SPL標準庫中實現了觀察者模式介面,PHP內建提供了兩個介面來供外部應用區實現這個模式。 SplSubject 介面 SplSubject代表著被觀察的物件,其結構: interface SplSubject{ //新增(註冊)一個觀察者 public func

spring-boot實戰08:Spring Boot屬性配置文件

命令行 可見 str ear isp active 文件加載 junit4 實驗 相信很多人選擇Spring Boot主要是考慮到它既能兼顧Spring的強大功能,還能實現快速開發的便捷。我們在Spring Boot使用過程中,最直觀的感受就是沒有了原來自己整合Spring

Linux系統編程---dup和dup2

系統 強調 操作 attach bsp ads 正常的 註意 tdi 正常的文件描述符: 在linux下,通過open打開以文件後,會返回一個文件描述符,文件描述符會指向一個文件表,文件表中的節點指針會指向節點表。看下圖: 打開文件的內核數據結構 dup和dup2兩

jQuery方法和選擇器的雙重使用

節點 使用詳解 選擇器 query 除了 nbsp clas pos ren 1.jQuery選擇直接子節點+除了某個元素   1》方法 $(".begon").children(".row:not(.moreDetail)")   2》選擇器 $(".begon

JavaScriptSetIntervalsetTimeout的用法

sta 對象 show thead ansi out 計時 顯示 設計 在寫H5遊戲時經常需要使用定時刷新頁面實現動畫效果,比較常用即setTimeout()以及setInterval(),但是大家對SetInterval與setTimeout的用法了解嗎,下面通過

python time模塊和datetime模塊

-a cond .com ima 封裝 基本 sta times %d 一、time模塊 time模塊中時間表現的格式主要有三種:   a、timestamp時間戳,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量   b、struct_time時間

JDK的Parser來解析Java原始碼

轉自:https://www.jb51.net/article/92989.htm 這篇文章主要介紹了JDK的Parser來解析Java原始碼的相關資料,需要的朋友可以參考下 在JDK中,自帶了一套相關的編譯API,可以在Java中發起編譯流程,解析Java原始檔然後獲取其語法樹,在JDK的

Jqueryattrprop的區別

當點選左上方那個checkBox時,要將下面的checkBox全部選中,我們的程式碼是這樣的 $("input[name='checkbox']").attr("checked",true); 然並卵,一點效果都沒有,後來換成這樣,好了 $(function(){ $("#all").c

Java == 號equals()方法區別

== 號與equals()方法區別這個問題在面試中經常被問到,如果你瞭解的不透徹,很容易被問蒙。下面我們來一起看看吧。 1.基本資料型別,也稱原始資料型別。byte,short,char,int,long,float,double,boolean 他們之間的比較,應用雙等號(==)