首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位于web目录之外的文件已损坏或截断。

位于web目录之外的文件已损坏或截断。
EN

Stack Overflow用户
提问于 2011-06-13 05:29:16
回答 4查看 941关注 0票数 0

我正在尝试使用一个处理程序来提供一个文件,该文件位于我的web目录之外,而且我遇到了一些问题。我想在处理程序中进行检查,并且需要能够运行一个查询,但是一旦我添加了一行代码,而不是我所显示的代码,我就会得到错误图像“handler.php?ID=d5xa24tdufoseg868r66yjz5sr19u41i”无法显示,因为它包含错误。在firefox中,我在firebug中检查了控制台,它说图像已经损坏或被截断。然而,如果我离开了基本代码,我已经显示了它只是服务于图像。有人知道为什么会这样吗?

编辑:显示所有代码

代码语言:javascript
复制
<?php
include("roc/include/connection.php");
$db = new PDOConnectionFactory();
$conn = $db->getConnection();

//prepare for utf8 characters
$sql = 'SET NAMES utf8';
$stmt = $conn->prepare($sql);
$result=$stmt->execute();

$sql = 'SET CHARACTER SET utf8';
$stmt = $conn->prepare($sql);
$result=$stmt->execute();
//**************************

if (! preg_match("/^[-a-z.-@,'s]*$/i",$_GET['ID']))

{

die('No illegal characters');

}

else

$empty=strlen($_GET['ID']);

if ($empty==0)

{

die('The text field cannot be empty');

}

else

{

$ID = $_GET['ID'];



if (strlen($_GET['ID'])>35){
exit("error");
}

}


$sql="SELECT file_name FROM video WHERE vid_id=?";
$stmt=$conn->prepare($sql);
$result=$stmt->execute(array($ID));

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$file_name = $row['file_name']."[img-004].jpg";
}

echo $path="/home/g/Desktop/processed/".$file_name."";


//check if image is readible and type
if (is_readable($path)) {

header('Content-Length: '.filesize($path)); // provide file size

header("Expires: -1");

header('Content-Type: image/jpeg');
$content=file_get_contents('/home/g/Desktop/processed/986861d331e8b4b4eacee5cb7aed494a[img-004].jpg');


}
else {
error_log("Can't serve image: $file_name");
}

?>

HTML输出

代码语言:javascript
复制
<img src="http://localhost/xampp/site_name/image_handler.php?ID=d5xa24tdufoseg868r66yjz5sr19u41i" alt="The image “http://localhost/xampp/site_name/image_handler.php?ID=d5xa24tdufoseg868r66yjz5sr19u41i” cannot be displayed because it contains errors.">
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-13 05:55:14

如果您在发送标头之前执行echo "test" ..。事情会变糟的。

如果你发送一个echo "test",你的标题说你在发送一个图像.事情会变糟的。

代码正在工作。

票数 1
EN

Stack Overflow用户

发布于 2011-06-13 05:38:36

如果将任何其他数据添加到图像数据中,则图像将损坏。如果你是输出一个图像,你最好不要回声除图像以外的任何东西。唯一的方法可能是写任何你想要写在图像上。您可以使用GD函数来完成这一任务。还有另一种方法,我可能会建议不要,你可以添加任何你喜欢结束的图像,而不会得到一个错误。但这并不能保证。

PS:除了屏幕上的回显之外,您仍然可以运行更多的代码。

票数 1
EN

Stack Overflow用户

发布于 2011-06-13 05:40:42

我不知道您要添加哪些代码来执行“检查”,但根据手册:记住,在发送任何实际输出之前,必须调用头(),无论是通过普通HTML标记、文件中的空行还是从PHP。

也许你会觉得将该图像放入缓冲区更好

代码语言:javascript
复制
<?php
  // Code that checks out whatever ..

  // more checks
  ob_start();
  myClass::renderPng(); //header("Content-Type: image/png"); in here
  $pngString = ob_get_contents();
  ob_end_clean();
?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6326960

复制
相关文章

相似问题

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