繁体   English   中英

hex2bin($ var)错误:输入字符串必须为十六进制字符串

[英]hex2bin($var) error : Input string must be hexadecimal string

您好,这里是将字符串转换为十六进制并反转的小代码。

有了这个,我们没有错误的字符串为十六进制:

<?php
if( isset($_POST['upload']) ) // si formulaire soumis
{
    $content_dir = 'tmpcipher/'; // dossier où sera déplacé le fichier
    $tmp_file = $_FILES['fichier']['tmp_name'];
    if( !is_uploaded_file($tmp_file) )
    {

    }
    // on vérifie maintenant l'extension
    $type_file = $_FILES['fichier']['type'];
    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {

    }
    $name_file2 = $_FILES['fichier']['name'];
    $hex = bin2hex(file_get_contents($content_dir . $name_file2));
    unlink($content_dir . $name_file2);
    $myfile2 = fopen($content_dir . $name_file2 . "2" , "w");
    $myfileurl = $content_dir . $name_file2 . "2";
    fwrite($myfile2, $str);
    fclose($myfile2);
    $myfile3 = $content_dir . $name_file2 . "2";
    if (file_exists($myfile3)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($myfile3));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($myfile3));
    readfile($myfile3);
}
}
?>

相反,这样我们有一个错误:

<?php
if( isset($_POST['upload']) ) // si formulaire soumis
{
    $content_dir = 'tmpcipher/'; // dossier où sera déplacé le fichier
    $tmp_file = $_FILES['fichier']['tmp_name'];
    if( !is_uploaded_file($tmp_file) )
    {

    }
    // on vérifie maintenant l'extension
    $type_file = $_FILES['fichier']['type'];
    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {

    }
    $str0 = file_get_contents($content_dir . $name_file); //HEXADECIMAL CONTENT 
$hexstr1 = hex2bin("73616c7574"); //WORK
$hexstr2 = hex2bin($str0); //ERROR
    $name_file = substr($name_file,0,-1);
    $myfile2 = fopen($content_dir . $name_file, "w");
    fwrite($myfile2, $str0);
    fclose($myfile2);
    $filectohex = file_get_contents($content_dir . $name_file);
    $myfile3 = $content_dir . $name_file;
    if (file_exists($myfile3)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($myfile3));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($myfile3));
    readfile($myfile3);
}
}
?>

php_error_log:[2015年1月25日欧洲/柏林00:34:25 PHP警告:hex2bin():第47行的C:\\ xampp \\ htdocs \\ dec.php中输入字符串必须为十六进制字符串

当我使用$ str0的字符串内容并使用hex2bin时,它可以工作。 我不知道PHP是否认为我的var是整数,请给我解决方案:)

感谢:D

[已解决]:编写要转换为ascii(十六进制内容)的变量,然后将该文件的内容(必须为十六进制)转换为ascii。

$hex2bin($str0); ---> 
$myfile2 = fopen($content_dir . $name_file, "w");
fwrite($myfile2, $str0);
fclose($myfile2);
$myfile2path = $content_dir . $name_file;
$bin = hex2bin(file_get_contents($myfile2path));

将文件内容写入另一个文件时遇到类似问题。 然后,我读取了新文件。 尝试将十六进制字符串转换为十六进制时,出现消息“非十六进制字符串”。

PHP编写文件时,在每帧末尾都在其末尾附加了“ 00”(作为不可打印的字符,因此无法识别为“正常”字符串)。

为了解决这个问题,我发送了以下内容而不是原始帧:

$trame1_substring=substr($trame1,0,strlen($trame1)-2);

您将$str而不是$hex写入文件。 该文件为空。 您读取一个空字符串,并且hex2bin('')给出错误。 在这段代码中:

// below you define $hex
$hex = bin2hex(file_get_contents($content_dir . $name_file2));
unlink($content_dir . $name_file2);
$myfile2 = fopen($content_dir . $name_file2 . "2" , "w");
$myfileurl = $content_dir . $name_file2 . "2";
// but here you write $str
fwrite($myfile2, $str);

您可以通过简单地回显$str0的内容来找到它:

echo“ str0的内容为[$ str0] \\ n”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM