本文目錄一覽:
- 1、php 使用file_get_contents讀取大文件的方法
- 2、php讀取文件操作
- 3、PHP讀取zip文件的方法示例
- 4、php讀取文件內容的幾種方法詳解
- 5、php如何讀取CSV大文件並且將其導入資料庫示例
- 6、php怎樣讀取excel表格內容?
php 使用file_get_contents讀取大文件的方法
當我們遇到文本文件體積很大時,比如超過幾十M甚至幾百M幾G的大文件,用記事本或者其它編輯器打開往往不能成功,因為他們都需要把文件內容全部放到內存裡面,這時就會發生內存溢出而打開錯誤,遇到這種情況我們可以使用PHP的文件讀取函數file_get_contents()進行分段讀取。
函數說明
string
file_get_contents
(
string
$filename
[,
bool
$use_include_path
[,
resource
$context
[,
int
$offset
[,
int
$maxlen
]]]]
)
和
file()
一樣,只除了
file_get_contents()
把文件讀入一個字元串。將在參數
offset
所指定的位置開始讀取長度為
maxlen
的內容。如果失敗,file_get_contents()
將返回
FALSE。
file_get_contents()
函數是用來將文件的內容讀入到一個字元串中的首選方法。如果操作系統支持還會使用內存映射技術來增強性能。
應用:
複製代碼
代碼如下:
$str
=
$content=file_get_contents(“2.sql”,FALSE,NULL,1024*1024,1024);
echo
$str;
如果針對較小文件只是希望分段讀取並以此讀完可以使用fread()函數
複製代碼
代碼如下:
$fp=fopen(‘2.sql’,’r’);
while
(!feof($fp)){
$str.=fread($fp,
filesize
($filename)/10);//每次讀出文件10分之1
//進行處理
}
echo
$str;
php讀取文件操作
在file讀文件之前,無需使用fopen打開。你的加上索引不知道是什麼意思,是不是把文件轉換為二維數組呀,你試試看下面的代碼:
$data = file(‘date.txt’);//讀取全部內容;
foreach ($data as $i=$line) $data[$i]=explode(chr(8),$data[$i]);
echo ‘pre’;
print_r($data);
echo ‘/pre’;
PHP讀取zip文件的方法示例
本文實例講述了PHP讀取zip文件的方法。分享給大家供大家參考,具體如下:
?php
$zip
=
zip_open(“111.zip”);
if
($zip)
{
while
($zip_entry
=
zip_read($zip))
{
echo
“Name:
“
.
zip_entry_name($zip_entry)
.
“n”;
echo
“Actual
Filesize:
“
.
zip_entry_filesize($zip_entry)
.
“n”;
echo
“Compressed
Size:
“
.
zip_entry_compressedsize($zip_entry)
.
“n”;
echo
“Compression
Method:
“
.
zip_entry_compressionmethod($zip_entry)
.
“n”;
if
(zip_entry_open($zip,
$zip_entry,
“r”))
{
echo
“File
Contents:n”;
$buf
=
zip_entry_read($zip_entry,
zip_entry_filesize($zip_entry));
echo
“$buf\n”;
zip_entry_close($zip_entry);
}
echo
“n”;
}
zip_close($zip);
}
?
運行效果截圖如下:
更多關於PHP相關內容感興趣的讀者可查看本站專題:《PHP操作zip文件及壓縮技巧總結》、《php文件操作總結》、《php正則表達式用法總結》、《PHP運算與運算符用法總結》、《PHP基本語法入門教程》、《php面向對象程序設計入門教程》、《php字元串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
php讀取文件內容的幾種方法詳解
?php
$url=”;
$html=file_get_contents($url);
//print_r($http_response_header);
ec($html);
printhr();
printarr($http_response_header);
printhr();
?
示例代碼2: 用fopen打開url, 以get方式獲取內容
複製代碼 代碼如下:
?
$fp=fopen($url,’r’);
printarr(stream_get_meta_data($fp));
printhr();
while(!feof($fp)){
$result.=fgets($fp,1024);
}
echo”url body:$result”;
printhr();
fclose($fp);
?
示例代碼3:用file_get_contents函數,以post方式獲取url
複製代碼 代碼如下:
?php
$data=array(‘foo’=’bar’);
$data=http_build_query($data);
$opts=array(
‘http’=array(
‘method’=’POST’,
‘header’=”Content-type: application/x-www-form-urlencodedrn”.
“Content-Length: “.strlen($data).”rn”,
‘content’=$data
),
);
$context=stream_context_create($opts);
$html=file_get_contents(”,false,$context);
echo$html;
?
php如何讀取CSV大文件並且將其導入資料庫示例
思路:
讀取csv文件,每讀取一行數據,就插入資料庫
示例
文件夾結構
/
file.csv //csv大文件,這裡只模擬三行數據,不考慮運行效率(PS:csv文件格式很簡單,文件一般較小,解析很快,運行效率的瓶頸主要在寫入資料庫操作)
index.php //php文件
file.csv
singi,20
lily,19
daming,23
index.php
/**
* 讀取csv文件,每讀取一行數據,就插入資料庫
*/
//獲取資料庫實例
$dsn = ‘mysql:dbname=test;host=127.0.0.1’;
$user = ‘root’;
$password = ”;
try {
$db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo ‘Connection failed: ‘ . $e-getMessage();
}
//讀取file.csv文件
if (($handle = fopen(“file.csv”, “r”)) !== FALSE) {
while (($row = fgetcsv($handle, 1000, “,”)) !== FALSE) {
//寫入資料庫
$sth = $db-prepare(‘insert into test set name=:name,age=:age’);
$sth-bindParam(‘:name’,$row[0],PDO::PARAM_STR,255);
$sth-bindParam(‘:age’,$row[1],PDO::PARAM_INT);
$sth-execute();
}
fclose($handle);
}
數據表
CREATE TABLE `test` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL DEFAULT ” COLLATE ‘utf8mb4_bin’,
`age` INT(10) NULL DEFAULT ‘0’,
PRIMARY KEY (`id`)
)
COLLATE=’utf8mb4_bin’
ENGINE=InnoDB;
運行結束後,資料庫中會插入csv中的三行數據
php怎樣讀取excel表格內容?
常用的用PHP讀取EXCEL的方法有以下三種,各自有各自的優缺點。個人推薦用第三種方法,因為它可以跨平台使用。
1. 以.csv格式讀取
將.xls轉換成.csv的文本格式,然後再用PHP分析這個文件,和PHP分析文本沒有什麼區別。
優點:跨平台,效率比較高、可以讀寫。
缺點:只能直接使用.csv的文件,如果經常接受.xls二進位文件的話需要手工轉換,不能自動化。一個文件只有一個SHEET。
PHP有自帶的分析.csv函數:fgetcsv
array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )
handle 一個由 fopen()、popen() 或 fsockopen() 產生的有效文件指針。
length (可選)必須大於 CVS 文件內最長的一行。在 PHP 5 中該參數是可選的。如果忽略(在 PHP 5.0.4 以後的版本中設為 0)該參數的話,那麼長度就沒有限制,不過可能會影響執行效率。
delimiter (可選)設置欄位分界符(只允許一個字元),默認值為逗號。
enclosure (可選)設置欄位環繞符(只允許一個字元),默認值為雙引號。該參數是在 PHP 4.3.0 中添加的。 和 fgets() 類似,只除了 fgetcsv() 解析讀入的行並找出 CSV 格式的欄位然後返回一個包含這些欄位的數組。
fgetcsv() 出錯時返回 FALSE,包括碰到文件結束時。
注意: CSV 文件中的空行將被返回為一個包含有單個 null 欄位的數組,不會被當成錯誤。
當然也可以自己手動分析字元串。
還可以利用fputcsv函數將行格式化為 CSV 並寫入文件指針。
2. ODBC鏈接數據源
優點:支持多種格式,cvs, xls等。支持讀寫,使用標準SQL語言,和SQLSERVER、MYSQL資料庫幾乎完全一樣。
缺點:值支持windows伺服器
3. PHP自定義類
優點:跨平台。某些類支持寫操作。支持.xls二進位文件
常用的類有phpExcelReader、PHPExcel。其中後者支持讀寫,但是需要php5.2以上版本。
phpExcelReader是專門用來讀取文件的。返回一個數組,包含表格的所有內容。
該 class 使用的方法可以參考網站下載回來的壓縮檔中的 example.php。
不過我下載回來的 (版本 2009-03-30),有兩點要注意:
reader.php 中的下面這行要修改
將 require_once 『Spreadsheet/Excel/Reader/OLERead.php』;
改為 require_once 『oleread.inc』;
example.php 中
修改 $data-setOutputEncoding(』CP1251′);
為 $data-setOutputEncoding(』CP936′);
example2.php 中
修改 nl2br(htmlentities($data-sheets[$sheet][‘cells’][$row][$col]));
為 $table_output[$sheet] .= nl2br(htmlspecialchars($data-sheets[$sheet][‘cells’][$row][$col]));
不然中文會有問題。
繁體的話可以修改為CP950、日文是CP932,具體可參考codepage說明。
修改 $data-read(』jxlrwtest.xls』) 為自己的 excel 文件名,zip 檔中附的 jxlrwtest.xls 應該是壞了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/312576.html