php文件讀取方法實例分析,php文件操作

本文目錄一覽:

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-hant/n/312576.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-06 09:47
下一篇 2025-01-06 09:47

相關推薦

發表回復

登錄後才能評論