Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Php和MysQL的类似Youtube的ID(UrL)_Php_Mysql_Video - Fatal编程技术网

使用Php和MysQL的类似Youtube的ID(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

我有一个关于视频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);
    $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