Jawaban:
Ini berarti fungsi akan bekerja dengan benar ketika Anda meneruskannya ke data biner arbitrer (yaitu string yang berisi byte non-ASCII dan / atau byte nol).
Misalnya, fungsi non-biner-aman mungkin didasarkan pada fungsi C yang mengharapkan string yang dihentikan null, jadi jika string berisi karakter null, fungsi tersebut akan mengabaikan apa pun setelahnya.
Ini relevan karena PHP tidak memisahkan data string dan biner dengan rapi.
Pengguna lain sudah menyebutkan apa binary safeartinya secara umum.
Dalam PHP, artinya lebih spesifik, hanya mengacu pada contoh yang diberikan Michael.
Semua string dalam PHP memiliki panjang yang terkait, yang merupakan jumlah byte yang menyusunnya. Ketika suatu fungsi memanipulasi string, itu bisa:
0akan muncul.Juga benar bahwa semua variabel string PHP yang dimanipulasi oleh mesin juga diakhiri dengan null. Masalah dengan fungsi yang bergantung pada 2., adalah, jika string itu sendiri berisi byte dengan nilai 0, fungsi yang memanipulasinya akan mengira string telah berakhir pada titik itu dan akan mengabaikan semuanya setelah itu.
Misalnya, jika strlenfungsi PHP bekerja seperti pustaka standar C strlen, hasilnya di sini akan salah:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
strlen()adalah fungsi aman-biner ? Saya mengonfirmasi dari Anda karena di halaman Manual PHP untuk fungsi strlen()tersebut tidak disebutkan apakah itu fungsi aman biner atau fungsi aman non-biner . Satu-satunya hal yang hilang dari Manual PHP ini membuat kebingungan dalam pikiran saya, jadi saya ingin memastikannya dari Anda. Saya sangat menantikan balasan Anda. Terima kasih.
php -r 'var_dump("\x00\x00\x00");'untuk memverifikasi, tetapi strlen php telah biner aman untuk waktu yang sangat lama, sejak setidaknya php 4.x (yang mengatakan, ada kekejian yang disebut "mb_overload", tetapi mari kita anggap itu tidak ada - php.net /manual/en/mbstring.overload.php )
Contoh lainnya:
<?php
$string1 = "Hello";
$string2 = "Hello\x00World";
// This function is NOT ! binary safe
echo strcoll($string1, $string2); // gives 0, strings are equal.
// This function is binary safe
echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2.
?>
\xmenunjukkan notasi heksadesimal. Lihat: string PHP
0x00 = NULL
0x04 = EOT (End of transmission)
Tabel ASCII untuk melihat daftar karakter ASCII
Hello\r\nWORLDtidak boleh sama dengan Hellojika fungsinya aman biner, bukan?
strlen() aman-biner ?