微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Web目录外部的文件已损坏或被截断

如何解决Web目录外部的文件已损坏或被截断

| 我正在尝试使用处理程序来提供Web目录之外的文件,但出现了一些问题。我想在处理程序中进行检查,并且需要能够运行查询,但是一旦我添加了除已显示内容之外的其他代码行,我就会收到错误图像“ http:// localhost / xampp / site_name” /image_handler.PHP?ID=d5xa24tdufoseg868r66yjz5sr19u41i”无法显示,因为其中包含错误。在firefox中,我在firebug中检查了控制台,并说图像已损坏或被截断。但是,如果我留下了基础代码,那么我已经展示了它只是为图片服务。有人知道为什么会这样吗? 编辑:显示所有代码
<?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输出
<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.\">
    

解决方法

        如果您在发送标题之前先进行a2 ...操作,则会出错。 如果您发送
echo \"test\"
,并且标题标明您正在发送图片,则可能会出错。 代码正在工作。     ,        如果将任何其他数据添加到图像数据,则图像将损坏。如果要输出图像,最好不要回显图像以外的任何东西。唯一的解决方法是在图像上写任何内容。您可以使用GD函数来执行此操作。我可能不建议您采用另一种方法,您可以在图像末尾添加任何所需的内容而不会出现错误。但这并不能保证。 PS:除了在屏幕上显示回声之外,您仍然可以运行更多代码。     ,        我不知道您要添加用于执行“检查”的代码,但按照手册进行操作:请记住,必须在发送任何实际输出之前调用header(),方法是使用常规HTML标记,空白行 在文件中,或从PHP中。 也许最好将图像放在缓冲区中:
<?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();
?>
    ,        如果出现错误,您希望脚本输出什么? HTML?特殊的错误图片?
<?php
$content = readfile(\'/home/g/Desktop/processed/986861d331e8b4b4eacee5cb7aed494a[img-004].jpg\');

// Did readfile succeed?

// Do db query.

// Do some other checks.

// Now output something to browser.
if ($are_we_okay == true) {
  header(\"Content-type: image/jpeg\");
  echo $content;
} else {
  header(\"Content-type: text/html\");
  echo \"<b>Failed!</b>\";
}
?>
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。