![](/img/trans.png)
[英]suitable output of hexdump in bash to be input of hex2bin function in php
[英]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.