首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PHP上传的文件读取单个字节

从PHP上传的文件读取单个字节
EN

Stack Overflow用户
提问于 2011-04-11 01:20:22
回答 3查看 4.2K关注 0票数 1

我对PHP非常陌生,所以请原谅我的无知。

我有用于上传的 HTML:

代码语言:javascript
复制
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /><br />
<input type="submit" name="submit" value="Submit" />
</form>

我的PHP是(它不知道,但希望它显示了我想要的):

代码语言:javascript
复制
<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  $content = fread($_FILES["file"],10);
  echo $content;
  echo "byte10 is: " ???
  }
?>

我想:从这个上传的文件,我想读取一个字节(例如字节10)。我想打印出这个字节的acscii (HEX)代码。我该怎么做?是否需要将文件保存到服务器?

()的最终目标是对文件进行加密,并将这个e加密的文件发回给用户。因此,我希望(1)上传文件(2)读取每个字节(2)在字节级别执行加密(3)保存文件并将其发送回用户)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-11 01:24:54

非常感谢你提出的“最终目标”--它将帮助我们确保你不会因为意外而做一些愚蠢的事情。

加密是一个非常复杂的话题。您不应该编写自己的加密例程。使用一个完整的,预先建立的解决方案。

马库特是PHP最好的加密扩展。Mcrypt支持多个通用密码,包括AES ("Rijndael")。加密非常容易 --使用"CBC“模式作为您的文件。

Vigenère密码是一个有46年历史的基于简单查找表的替换密码.

这就解释了整件事。

虽然您可以一次读取整个文件,但您可能会发现使用字符串更方便。您可以将整个文件读入变量(通过file_get_contents或其他方式),然后使用substr方括号子字符串语法一次读取字符串一个字节。记住,PHP字符串只是简单的字节列表。

鉴于$data是文件中的完整数据,您可以以这样的方式处理每个字节:

代码语言:javascript
复制
$length = strlen($data);
for($i = 0; $i < $length; $i++) {
    $byte = $data[$i];
// Or
    $byte = substr($data, $i, 1);
// Process the byte here.
}

这仅适用于小文件(小于几兆字节),因为它需要将整个文件加载到内存中。

我想打印出这个字节的acscii (HEX)代码。

您可以使用ord获取十进制值,然后使用dechex将其转换为十六进制字符串。

代码语言:javascript
复制
$hex_value = dechex(ord($byte));

使用hexdec从十六进制到十进制,然后使用chr从十进制到字节:

代码语言:javascript
复制
$converted_byte = chr(hexdec($ciphered_hex));
票数 1
EN

Stack Overflow用户

发布于 2011-04-11 01:25:38

多个实现,我将使用寻觅为您提供一个可重用的实现。

代码语言:javascript
复制
<?php
function getByte($f,$n){
    fseek($f,$n);
    return fread($f,1);
}

$f=fopen('your_file_path');
echo getByte($f,10);
?>

我强烈建议在使用任何文件之前使用$_FILES。

如果你不小心的话,我对你的建议是读更大的块,然后对它们进行操作。

票数 2
EN

Stack Overflow用户

发布于 2011-04-11 01:33:30

在PHP中,字符串基本上是一个字节数组,因此您可以使用fread()函数将一些字符读入字符串,然后使用数组符号访问单个字节。例如:

代码语言:javascript
复制
$content = fread($_FILES["file"],10);
echo $content;
echo "byte10 is: ".$content[9]; // 9 because offset starts from 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5615935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档