2009-06-12 108 views
0

我需要的是一個相當於PHP的fseek()函數。該函數在文件上工作,但我有一個包含二進制數據的變量,我想處理它。我知道我可以使用substr(),但這將是蹩腳的 - 它用於字符串,而不是二進制數據。此外,創建一個文件,然後使用fseek()是不是我正在尋找。PHP fseek()等價於變量?

也許是用流構造的東西?

編輯:好的,我幾乎沒有:

$data = fopen('data://application/binary;binary,'.$bin,'rb'); 

警告:未能打開流:rfc2397:非法參數

+0

我不明白爲什麼不使用substr()。您是否遇到過使用它的任何問題? – 2009-06-12 15:02:16

+0

是的,速度很慢。 – Tower 2009-06-12 15:22:35

回答

5

凱:

你幾乎已回答你在這裏。流是答案。下面的手冊條目會很有啓發性:http://us.php.net/manual/en/wrappers.data.php

它本質上允許你將任意數據傳遞給PHP的文件處理函數,比如fopen(也就是fseek)。

然後,你可以這樣做:數據

<?php 

$data = fopen('data://mime/type;encoding,' . $binaryData); 

fseek($data, 128); 
?> 
+0

只要在php.ini中打開allow_url_fopen,這將起作用 – 2009-06-12 15:01:30

+0

代碼無效。構造似乎是錯誤的。我確實使用了'rb'模式,但第一部分在某種程度上似乎是錯誤的。 「未能打開流:rfc2397:非法參數」 – Tower 2009-06-12 15:38:26

2

FSEEK在一個變量是沒有意義的。 fseek只是將文件句柄定位到指定的偏移量,所以下一次fread調用開始讀取該偏移量。字符串沒有等價的fread。

substr()有什麼問題?

有了一個文件,你會怎麼做:

$f = fopen(...) 
fseek($f, offset) 
$x = fread($f, len) 

與SUBSTR:

$x = substr($var, offset, len) 
-1

我猜測,但也許是什麼被要求是訪問一個變量字節的方式使用一個指針..(像使用它的字節數組一樣,你可以在c中執行 - 沒有將數據放入php數組中的內存開銷),並且能夠在不需要複製數據的開銷的情況下就地編輯它們。

不能這樣做是一個BIG問題,但是如果操作系統在臨時文件上使用fseek緩存磁盤數據可能是一種解決方法。