php - Mysql blob 字段有第一行空格,因此不会播放文件

标签 php mysql

我有一些代码可以从 Android 上传和下载录音。我遇到的问题是二进制文件中出现了一个额外的空行。当它被删除时,文件会播放,我想知道如何阻止此行的出现。下面是我的上传和下载代码以及空行的打印屏幕

上传代码

    mysql_select_db ($database); 

// Make sure the user actually 
// selected and uploaded a file
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 

      $size = $_FILES['image']['size'];
      $type = $_FILES['image']['type'];

      // Temporary file name stored on the server
      $tmpName  = $_FILES['image']['tmp_name'];  

      // Read the file 
      $fp      = fopen($tmpName, 'r');
      $data = fread($fp, filesize($tmpName));
      fclose($fp);

      $data = trim(addslashes($data));

      // Create the query and insert
      // into our database.
      $query = "INSERT INTO media";
      $query .= "(file, file_size, file_type) VALUES ('$data','$size','$type')";
      $results = mysql_query($query, $link);

      $mediaid = mysql_insert_id();

    $gender = $_POST['gender'];
    $cat_id = $_POST['cat'];
    $name = $_POST['name'];
    $lat = $_POST['lat'];
    $lon = $_POST['lon'];
    $user = $_POST['user'];


  $query="INSERT INTO instance (name, gender, cat_id, lon, lat, user_id) VALUES ('$name', '$gender', '$cat_id', '$lon', '$lat', '$user')";
  $result=mysql_query($query);


      $instanceid = mysql_insert_id();

      $query4 = "INSERT INTO media_link";
      $query4 .="(media_id, instance_id) Values ('$mediaid','$instanceid')";
      $results4 = mysql_query($query4, $link);

    }

// Close our MySQL Link
mysql_close($link);
?>

下载代码

$test2 = @mysql_query("select * from media where media_id = '$media'");
    $result2 = mysql_fetch_array($test2);

header('Content-Type: audio/AMR');
header('Content-Disposition: attachment; filename="ifound.amr"');


    print $result2['file'];
exit;

?>

出现空行 blank line

最佳答案

检查您的下载代码在第一个 <?php 之前是否有空行。请记住检查它包含的所有文件。

同时更改addslashesmysql_real_escape_string 。它可能不会在这里造成问题,但它是安全漏洞。

如果您找不到问题的根源,您可以随时尝试 base64_encode/base64_decode 。它需要多出 30% 的存储空间,但这是一种在字符串中存储二进制数据的可靠方法。

小提示:

  $fp      = fopen($tmpName, 'r');
  $data = fread($fp, filesize($tmpName));
  fclose($fp);

可以替换为

  $data = file_get_contents($tmpName)

关于php - Mysql blob 字段有第一行空格,因此不会播放文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860086/

相关文章:

php - strtotime php mysql

php - 我想获得两个数组之间的差异

php - 为每组获取一行,其中包含订单和限制

php - mySQL 给出不正确的结果

php - 强制浏览器缓存 PHP 生成的 JavaScript

php - 无法通过数据库查询验证用户

Mysql查询在两列的基础上动态将行转列

javascript - 将背景颜色保存/检索到数据库

java - 不使用短信网关从网站向手机发送短信

引用 Php