0

0

CodeIgniter中动态嵌入YouTube视频教程:解决连接与路径问题

花韻仙語

花韻仙語

发布时间:2025-08-18 23:42:45

|

897人浏览过

|

来源于php中文网

原创

codeigniter中动态嵌入youtube视频教程:解决连接与路径问题

本教程旨在指导开发者如何在CodeIgniter应用中动态嵌入存储在数据库中的YouTube视频。核心内容包括理解YouTube视频的正确嵌入URL格式、在视图层使用

  • 观看链接示例: https://www.youtube.com/watch?v=dQw4w9WgXcQ
  • 嵌入链接示例: https://www.php.cn/link/58e7c89cf97a89b2e455a26557093e50

请注意,嵌入链接的路径中包含/embed/。如果您直接将观看链接放入

数据准备与数据库存储

为了实现动态嵌入,您需要在数据库中存储YouTube视频的完整嵌入URL。

推荐的数据库存储方式: 在数据库中为视频链接创建一个字段(例如 video_embed_url),并确保其中存储的是完整的YouTube嵌入URL。

id title video_embed_url
1 My Video 1 https://www.php.cn/link/58e7c89cf97a89b2e455a26557093e50
2 My Video 2 https://www.php.cn/link/204febcbbc5ee18b88a7c4680f293c19

CodeIgniter中的动态加载实现

在CodeIgniter中实现动态加载,主要涉及控制器从数据库获取数据,并将数据传递给视图,最后在视图中使用

1. 控制器 (Controller)

控制器负责从模型中获取视频链接数据,并将其传递给视图。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class VideoController extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('Video_model'); // 加载视频模型
    }

    /**
     * 显示单个视频页面
     * @param int $video_id 视频ID
     */
    public function view($video_id) {
        // 从数据库获取视频信息
        $video_data = $this->Video_model->get_video_by_id($video_id);

        if ($video_data) {
            $data['video_link'] = $video_data->video_embed_url; // 获取嵌入URL
            $this->load->view('video_display_view', $data); // 加载视图并传递数据
        } else {
            // 处理视频不存在的情况,例如显示404页面或错误消息
            show_404();
        }
    }
}

2. 模型 (Model)

模型负责与数据库交互,获取视频数据。

Vozo
Vozo

Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

下载
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Video_model extends CI_Model {

    public function __construct() {
        parent::__construct();
        $this->load->database(); // 加载数据库
    }

    /**
     * 根据ID获取视频信息
     * @param int $video_id 视频ID
     * @return object|null 视频数据对象或null
     */
    public function get_video_by_id($video_id) {
        $this->db->where('id', $video_id);
        $query = $this->db->get('videos'); // 假设表名为 'videos'
        return $query->row(); // 返回单行结果
    }
}

3. 视图 (View)

视图负责使用

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动态嵌入YouTube视频</title>
    <style>
        .video-container {
            width: 100%;
            max-width: 800px; /* 控制视频容器最大宽度 */
            margin: 20px auto;
            background-color: #f0f0f0;
            padding: 15px;
            box-shadow: 0 0 10px rgba(0,0,0,0.1);
            text-align: center; /* 居中iframe */
        }
        .video-container iframe {
            width: 100%; /* 使iframe宽度自适应容器 */
            height: 450px; /* 设置iframe高度,可根据需要调整 */
            border: none; /* 移除默认边框 */
        }
    </style>
</head>
<body>

    <div class="video-container">
        <h2>观看视频</h2>
        <?php if (isset($video_link) && !empty($video_link)): ?>
            <iframe width="560" height="315"
                    src="<?php echo htmlspecialchars($video_link); ?>"
                    frameborder="0"
                    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
                    allowfullscreen>
            </iframe>
        <?php else: ?>
            <p>视频链接未找到或无效。</p>
        <?php endif; ?>
    </div>

</body>
</html>

在上述视图代码中,htmlspecialchars()函数用于转义HTML特殊字符,防止XSS攻击,这是一个良好的安全实践。

重要注意事项与常见问题排查

  1. YouTube嵌入URL的正确性:

    • 最常见问题: 使用了观看链接(watch?v=)而不是嵌入链接(embed/)。请务必检查您数据库中存储的URL是否为https://www.youtube.com/embed/VIDEO_ID的格式。
    • 解决方案: 在存储到数据库前或在渲染到视图前,确保将观看链接转换为嵌入链接。例如,您可以在控制器或模型中实现一个转换函数。
  2. 区分本地视频与外部视频源:

    • 本地视频: 如果您的视频文件(如.mp4)托管在自己的服务器上,那么src属性应该使用base_url()结合相对路径来构建完整的本地URL。
      <iframe src="<?php echo base_url('assets/videos/my_local_video.mp4'); ?>"></iframe>
    • 外部视频(如YouTube): 对于YouTube等外部平台,src属性必须是该平台提供的完整、可直接访问的视频嵌入URL。绝不应在YouTube链接前加上base_url(),因为YouTube视频并非存储在您的服务器上。原始问题中可能存在的base_url()/path/就是这种混淆的体现。
    • width和height:定义播放器的尺寸。
    • frameborder="0":移除
    • allowfullscreen:允许用户全屏播放视频。
    • allow:这是一个重要的属性,它控制
  3. 内容安全策略 (CSP): 如果您的网站配置了严格的内容安全策略(Content Security Policy),可能会阻止YouTube视频加载。您需要在HTTP响应头或标签中配置frame-src指令,以

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

384

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2110

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

357

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

259

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

329

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

420

2023.10.16

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

474

2023.10.16

vb连接数据库的方法
vb连接数据库的方法

vb连接数据库的方法有使用ADO对象库、使用OLEDB数据提供程序、使用ODBC数据源等。详细介绍:1、使用ADO对象库方法,ADO是一种用于访问数据库的COM组件,可以通过ADO连接数据库并执行SQL语句。可以使用ADODB.Connection对象来建立与数据库的连接,然后使用ADODB.Recordset对象来执行查询和操作数据;2、使用OLEDB数据提供程序方法等等。

231

2023.10.19

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Node.js 教程
Node.js 教程

共57课时 | 13.1万人学习

CSS3 教程
CSS3 教程

共18课时 | 6.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号