如何避免file_get_content / fgets / fread分离我的字符串?

时间:2014-01-06 04:23:31

标签: php string encoding openssl

我有一个使用openssl base 64生成的.txt文件,假设该文件的内容是:

HIK + W9hsOweQdOYx0ngYn + O54lXiDjZvDdzjtBwTI / uhPKF5egIIXnau3535G3wOyZnsI6F3YgokDfc9m6O3UM7MBMqgG5TEqtPdCzSbFq9VUPdJSmznNVQCI207OMku9NNLgehkh / jK2eITpPuh97EQuCW / aJjl0quM07bhWiI =

全部在一行中,但即使我从记事本复制并将其粘贴在此处,它也会粘贴为3行:

HIK + W9hsOweQdOYx0ngYn + O54lXiDjZvDdzjtBwTI / uhPKF5egIIXnau3535G3wO yZnsI6F3YgokDfc9m6O3UM7MBMqgG5TEqtPdCzSbFq9VUPdJSmznNVQCI207OMku 9NNLgehkh / jK2eITpPuh97EQuCW / aJjl0quM07bhWiI =

我一直试图通过separing来欺骗字符串,但无论我尝试它只是不起作用,我已经尝试了下一个:

$handle = fopen($file, "r");
$str = "";
while($line = fgets($handle)){
    echo $line; <--here i get 3 strings separated by a space characters
    $str = $str.$line; 
fclose($handle);
echo $str; <--- same 3 strings separated by a space
die;

然后尝试了:

$handle = fopen($file, "r");
    $str2 = "";
$str = fread($handle, filesize($file)); <-same result
fclose($handle);
echo substr($str,0,64);  
echo substr($str,64,64);
echo substr($str,128);  <-same result
    $str2 = substr($str,0,64).substr($str,64,64).substr($str,128); <-same result

我实际上是第一次尝试这个,因为这应该是获取文件内容的最简单方法:

$str = file_get_contents($file);
$str = str_replace(' ', '', $str);
echo $str;   <- same result

试图替换''by'',它不起作用,让我相信即使.txt文件中只有一个字符串,不知何故base64编码使这些字符串特殊而且最糟糕的是,php知道它并且不能忽略它,但我需要它是1个单一的字符串,任何人都知道发生了什么并且解释它的想法?如何在没有每64个字符的空格的情况下获得1个字符串?这让我发疯了。

1 个答案:

答案 0 :(得分:1)

来自http://wiki.openssl.org/index.php/Command_Line_Utilities的base64部分:

  

“警告base64行长度默认限制为76个字符   openssl(并生成64个字符/行)...能够   解码base64行,不使用超过76个字符的换行符    - 选项:“

这意味着你的命令:

  

openssl base64 -in $ bin -out $ file

会自动将输出分解为64个字符行

如果您希望输出在一行中,请使用-A选项:

  

openssl base64 -A-in $ bin -out $ file

这将使您的输出全部为1个大字符串

使用file_get_contents()将其读入您的php脚本可以获得理想的结果。

这个维基页面确实对-A选项说了这个:

  

“... - 一个选项是BUGGY(限制长文件)。”

虽然没有显示“长文件”的长度。


如果您想坚持使用原始的openssl命令:

  

openssl base64 -in $ bin -out $ file

然后尝试将其全部变成一个字符串:

$str = file_get_contents($file);
$str = str_replace("\n", "", $str);
echo $str;