我有一些代码可以从 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;
?>
出现空行
最佳答案
检查您的下载代码在第一个 <?php
之前是否有空行。请记住检查它包含的所有文件。
同时更改addslashes
至mysql_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/