Risposte:
Significa che la funzione funzionerà correttamente quando si passano dati binari arbitrari (cioè stringhe contenenti byte non ASCII e / o byte nulli).
Ad esempio, una funzione non binary-safe potrebbe essere basata su una funzione C che prevede stringhe con terminazione null, quindi se la stringa contiene un carattere null, la funzione ignorerà qualsiasi cosa dopo di essa.
Ciò è rilevante perché PHP non separa in modo pulito i dati stringa e binari.
Gli altri utenti hanno già menzionato cosa binary safesignifica in generale.
In PHP, il significato è più specifico, riferendosi solo a ciò che Michael dà come esempio.
Tutte le stringhe in PHP hanno una lunghezza associata, che è il numero di byte che la compongono. Quando una funzione manipola una stringa, può:
0verrà visualizzato un byte con valore .È anche vero che tutte le variabili PHP di stringa manipolate dal motore sono anche a terminazione null. Il problema con le funzioni che si basano su 2., è che, se la stringa stessa contiene un byte con valore 0, la funzione che lo sta manipolando penserà che la stringa sia terminata a quel punto e ignorerà tutto dopo.
Ad esempio, se la strlenfunzione di PHP funzionasse come la libreria standard C strlen, il risultato qui sarebbe sbagliato:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
strlen()è una funzione binary-safe ? Sto confermando da te perché nella pagina del manuale PHP per la funzione strlen()non è stato menzionato se si tratta di una funzione binary-safe o non-binary safe . Questa unica cosa che manca dal manuale PHP sta creando confusione nella mia mente, quindi voglio confermarlo da te. Attendo con impazienza la tua risposta. Grazie.
php -r 'var_dump("\x00\x00\x00");'per verificare, ma lo strlen di php è stato binario sicuro per molto tempo, da almeno php 4.x (detto questo, c'è un abominio chiamato "mb_overload", ma facciamo finta che non esista - php.net /manual/en/mbstring.overload.php )
Altri esempi:
<?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.
?>
\xindica la notazione esadecimale. Vedi: stringhe PHP
0x00 = NULL
0x04 = EOT (End of transmission)
Tabella ASCII per vedere l'elenco dei caratteri ASCII
Hello\r\nWORLDnon dovrebbe essere la stessa come Hellose la funzione fosse sicura per i binari, giusto?
strlen() binary-safe ?