你好,这是将字符串转换为十六进制和反向的小代码。
这个我们没有错误字符串到十六进制:
<?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));
答案 0 :(得分:1)
在将文件内容写入另一个文件时遇到了类似的问题。然后,我读取了新文件。 尝试将十六进制字符串转换为十六进制时,出现消息“非十六进制字符串”。
PHP编写文件时,在每帧末尾都在其末尾添加了“ 00”(作为不可打印的字符,因此无法识别为“正常”字符串)。
要解决此问题,我发送了以下内容而不是原始帧:
$trame1_substring=substr($trame1,0,strlen($trame1)-2);
答案 1 :(得分:0)
您将$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&#34; str0的内容是[$ str0] \ n&#34;