我遇到了问题,并且一直在寻找4天的答案 - 主要是在谷歌上,但已经碰壁了。
有人可以帮忙吗?请。
这是背景:
我的所有网页都是.php文件。
我邀请访问者使用网页上的表单给我一个别名和电子邮件地址。
我将别名和电子邮件存储在我服务器上的.txt文件中。
我不希望电子邮件是纯文本,但我不是在寻找一个聪明的加密例程 - 我没有其他关于访问者的信息。
我的快速简便的解决方案是使用PHP二进制NOT运算符(〜)交换每个字符中的每个位。
因此:$ code =〜$ email导致“abc”被编码(十六进制)从61 62 63到9E 9D 9C
以下是我如何写和阅读.txt文件:
我使用表单从访问者那里获取“别名”和“电子邮件”,我将其“发布”到“savethisperson.php”。 在“savethisperson.php”中,我使用以下代码 -
CODE SNIPPET 1
$fd = fopen("persondata.txt", "a");
fwrite($fd, $_POST['alias'] . ",");
fwrite($fd, ~$_POST['email']); // note the encryption of the string using ~
fwrite($fd, "\r\n");
fclose($fd);
您将注意到,这会为每个访问者创建一行,并在行中用逗号分隔两个字符串。
我现在想列出“persondata.txt”文件中的每一行,显示加密代码 -
CODE SNIPPET 2
$members = file("persondata.txt"); // Creates an array called "members" with one line in each element of the array.
foreach ($members as $nxtline) // Creates variable called "nxtline" for each element in turn
{
echo $nxtline, "<br>";
}
我现在要列出“persondata.txt”文件中的每一行,取消加密电子邮件地址 -
CODE SNIPPET 3
$members = file("persondata.txt"); // Creates an array called "members" with one line in each element of the array.
foreach ($members as $nxtline) // Creates variable called "nxtline" for each element in turn
{ $data = str_getcsv($nxtline); // Creates an array called "data" for each string separated by a comma.
echo $data[0]), "," ~$data[1], "<br>"; // Note the un-encryption of data[1] using ~
}
这是我的问题吗?
我更改了服务器提供程序,上面的一些代码已停止工作。
我的旧提供商提供了PHP版本5.4。一切正常。
我的本地(在我自己的机器上)测试服务器使用PHP 5.3.8。一切正常。
我的新提供商提供PHP 5.3.2-1ubuntu4.27,我遇到了问题:
代码段1有效。
代码段2有效。
代码段3失败。所以我假设“str_getcsv”函数在(Hex)8 *和9 *范围内的代码失败。但是为什么它会在我的测试服务器上运行之前仍然有效?
也许我的假设是错误的,并且还有其他一些原因导致代码段3停止工作。
如果重要 - 所有服务器都使用Apache 2.0处理程序。
请不要告诉我改变加密方法。