【问题标题】:Youtube-Like IDs (UrL) With Php and MysQL使用 Php 和 Mysql 的 Youtube-Like ID (UrL)
【发布时间】:2014-08-30 05:17:43
【问题描述】:

我对视频网址有一个问题。

我正在尝试上传视频。所以这是我的基本视频上传代码:

<?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')");
}

?>

在此代码中$url 部分是视频网址。

这是我的watch.php 代码:

<?php

if(isset($_GET['id']))
{
    $id = $_GET['id'];
    $query = mysql_query("SELECT * FROM `video` WHERE id='$id'");
    while($row = mysql_fetch_assoc($query))
    {
        $name = $row['name'];
        $url = $row['url'];
    }

    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='$url' type='video/mp4' />
  </video>";
}
else
{
    echo "Error!";
}

?>

在这段代码&lt;source src='$url' type='video/mp4' /&gt; 部分显示如下:

<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)?

【问题讨论】:

  • 将上传的文件名记录到数据库并为它创建一个独特的拥有?
  • @RamRaider 我该怎么做?

标签: php mysql video


【解决方案1】:

好的,首先,您使用的代码存在漏洞。($_GET['id'] 部分)您应该检查SQL Injectionsanitizing your code. 最重要的是保持安全。

我会先为你的文件取一个唯一的名字(如果你要找的话,看起来很酷,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

现在,让我们将其添加到数据库中。 -->

+----+----------+------+
| id |   name   | ext  |
+----+----------+------+
| x  | x5Wa88Bq | .mp4 |
+----+----------+------+

我创建此数据库的前提是您的上传路径始终相同,否则您将不得不采用不同的解决方案。

 //?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 文件,它实际上将指向我们视频的某个位置。

加载.php ->

$v = $_GET['v']; //Sanitise first, don't use like this.

//Compare with database, if true get name and extension
$name = $row['name'];
$ext = $row['ext'];
$url = 'http://localhost:8888/videouploadandplayback/uploaded/';


if(!empty($v)){
    header("location:"$url.$name.$ext."");  
}

我们的 load.php 现在检查是否存在具有特定名称的视频(例如 x5Wa88Bq),因为该文件存在,它会将其指向正确的目录。处理视频的代码意识到load.php?v=$name 指向视频(或不指向)并播放(不)。

现在,如果您想做更多“造型”,可以查看.htaccess guides。它将帮助您重写您的 URL。希望你能做到

<source src='$name' type='video/mp4' /> 

干杯。

【讨论】:

  • 感谢您的最佳回复。我尝试了一下,但是当我发布视频时,视频名称看起来像这样 => a7a34c9a.mp4 在数据库表中
  • 啊,问题是我在将 $name 和 $ext 实际添加到“数据库”之前将其连接起来。您可以再次查看代码,我已经对其进行了编辑。 (第一个代码块)
  • 我没有使用加载页面我正在使用 video.php 页面此页面显示所有视频链接。
  • 现在没有真正关注你。我已经更改了代码,因此它不会再将 .mp4 添加到数据库中。
  • 为了获得更短的“id”而切割 md5-hash 是不好的。即使使用完整的 md5-hash 作为 id 也是不好的。哈希不是 id。 id 必须是唯一的。哈希不是。
【解决方案2】:

只需使用自动增量 id 生成您的数据库条目,以确保每个上传文件的唯一值。

然后,您可以简单地将(十进制)id 转换为具有另一个基数的字符串 - 并且您有一个 youtoube-like-id

$youtubeLikeId = base_convert($actual_id, 10, 35);

示例值:

$youtubeLikeId = base_convert(21122544, 10, 35); //returns e2mv9

要取回原始(代理)ID,只需反转基本转换:

$actual_id = base_convert("e2mv9", 35,10); //returns 21122544

Sidenode:Youtube 通过使用大写字母来增强转换。

【讨论】:

    猜你喜欢
    • 2011-11-05
    • 2012-10-11
    • 2019-02-19
    • 2015-09-20
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多