使用Php和MysQL的类似Youtube的ID(UrL)
我有一个关于视频url的问题 我正在尝试做一个视频上传。这是我的基本视频上传代码:使用Php和MysQL的类似Youtube的ID(UrL),php,mysql,video,Php,Mysql,Video,我有一个关于视频url的问题 我正在尝试做一个视频上传。这是我的基本视频上传代码: <?php include_once '../includes.php'; if(isset($_POST['submit'])) { $name = $_FILES['file']['name']; $temp = $_FILES['file']['tmp_name']; move_uploaded_file($temp,"uploaded/".$name); $ur
<?php
include_once '../includes.php';
if(isset($_POST['submit']))
{
$name = $_FILES['file']['name'];
$temp = $_FILES['file']['tmp_name'];
move_uploaded_file($temp,"uploaded/".$name);
$url = "http://localhost:8888/videouploadandplayback/uploaded/$name";
mysql_query("INSERT INTO `video` VALUE ('','$name','$url')");
}
?>
在该代码中,
部分显示如下:
<source src="http://localhost:8888/videouploadandplayback/uploaded/158382524199979_46659.mp4" type="video/mp4">
<source src="http://localhost:8888/videouploadandplayback/uploaded/x5Wa88Bq" type="video/mp4">
但我想改变它,例如:
<source src="http://localhost:8888/videouploadandplayback/uploaded/158382524199979_46659.mp4" type="video/mp4">
<source src="http://localhost:8888/videouploadandplayback/uploaded/x5Wa88Bq" type="video/mp4">
我如何以这种方式创建URL(如Youtube?好的,首先,您在那里使用的代码是易受攻击的。(
$\u GET['id']
部分)您应该签出,最重要的是保持安全
首先,我要为你的文件命名一个独特的名字(如果你想要的是youtube风格的话,那么它看起来很酷)
你可以用任何你喜欢的方式来解决这个问题,这是我非常简单的例子
//if no errors
$name = $_FILES['file']['name'];//Our name
$temp = $_FILES['file']['tmp_name'];
$ext = pathinfo($name, PATHINFO_EXTENSION); //Get the extension before we make any changes.
$name =md5($name.microtime());//md5 of our name and microtime, this makes sure the encryption is random most of the time, because microtime is always changing.
$name = substr($name, 0,8); //Cutting off the part we don't need
move_uploaded_file($temp,"uploaded/".$name.'.'.$ext); //Storing out file
现在,让我们将其添加到数据库中。-->
我创建这个数据库的前提是,您的上传路径总是相同的,如果不是,那么您将不得不使用不同的解决方案
//?Selecting from database by id, if no errors $name = $row['name'];
echo "You are watching ".$name."<br />";
echo "<video id='my_video_1' class='video-js vjs-default-skin'
controls preload='none' width='640px' height='267px' data-setup='{}'>
<source src='load.php?v=$name' type='video/mp4' /> </video>";
我们的load.php现在检查是否有具有特定名称(例如x5Wa88Bq)的视频,因为该文件存在,所以它会将其指向正确的目录。处理视频的代码意识到,load.php?v=$name
指向视频(或不指向视频)并播放(不播放)
现在如果你想做更多的“造型”,你可以去看看。它将帮助您重写URL。希望你能做到
<source src='$name' type='video/mp4' />
干杯。只需使用自动递增id生成数据库条目,以确保每个上传的文件具有唯一的值 然后,您可以简单地将(十进制)id转换为具有另一个基数的字符串-您有一个YouTube-like id: 示例值:
$youtubeLikeId = base_convert(21122544, 10, 35); //returns e2mv9
要恢复原始(surogate)id,只需反转基本转换:
$actual_id = base_convert("e2mv9", 35,10); //returns 21122544
Sidenode:Youtube通过使用大写字母使用增强的转换。将上传的文件名记录到数据库中,并为其创建一个唯一的has?@RamRaider我该怎么做?感谢您的最佳回复。我尝试过,但当我在数据库tableAh中发布视频名称时,它看起来像这样=>
a7a34c9a.mp4
,问题是我在实际将$name和$ext添加到“数据库”之前连接了它。你可以再次查看代码,我已经编辑过了。(第一个代码块)我没有使用加载页面,我使用的是video.php页面。这个页面显示了所有的视频链接。现在没有真正关注你。我已经更改了代码,这样它就不会再将.mp4添加到数据库中了。为了得到更短的“id”而剪切md5哈希是不好的。即使使用完整的md5哈希作为id也是不好的。散列不是ID。id必须是唯一的。散列不是。
$youtubeLikeId = base_convert(21122544, 10, 35); //returns e2mv9
$actual_id = base_convert("e2mv9", 35,10); //returns 21122544