PHP fseek () değişkenler için eşdeğer?

3 Cevap php

Neye ihtiyacım PHP'nin fseek () işlevi için bir eşdeğerdir. Fonksiyon dosyaları üzerinde çalışır, ancak ikili veri içeren bir değişken var ve ben onunla çalışmak istiyorum. Ben substr () kullanabilirsiniz biliyorum, ama bu topal olacak - değil ikili veri için, dizeleri için kullanılır. Ayrıca, bir dosyayı oluşturma ve sonra fseek () kullanarak ben de arıyorum ne değildir.

Belki bir şey akarsu ile inşa?

EDIT: Tamam, ben neredeyse oradayım:

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

Uyarı: failed to open stream: rfc2397: Geçersiz parametre

3 Cevap

Kai:

Neredeyse kendinizi burada cevap var. Akarsular cevap vardır. http://us.php.net/manual/en/wrappers.data.php: Aşağıdaki manuel giriş aydınlatıcı olacaktır

Aslında böyle fopen (ve dolayısıyla fseek) gibi PHP'nin dosya yönetimi fonksiyonları için rasgele veri geçmesine izin verir.

Sonra gibi bir şey olabilir:

<?php

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

fseek($data, 128);
?>

Bir değişken veri fseek mantıklı değil. fseek sadece belirtilen ofset dosya tanıtıcısı konumlandırır, bu yüzden bir sonraki fread çağrısı ofset okuma başlar. Dizeleri için fread hiçbir eşdeğeri yoktur.

Nedir substr yanlış (?)

Bir dosya ile yapardın:

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

substr ile:

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

Ben tahmin, ama belki ne için soruluyor (eğer c yapabileceği gibi bir bayt dizisi gibi kullanıyor .. bir işaretçi kullanarak bir değişkene bayt erişmek için bir yoldur kulüpler - verileri koyarak bellek yükü olmadan php dizilerde) ve veri kopyalama yükü olmadan INPLACE bunları düzenlemek için güçlü olmak.

Bunu yapmak mümkün olmayan büyük bir sorun olduğunu, ancak işletim sistemi de geçici dosya üzerinde fseek kullanarak disk verileri önbelleğe alır eğer bir çözüm olabilir.