PHP - Преобразование URL-адреса Youtube в URL-адрес для встраивания


Я пытаюсь преобразовать стандартный URL-адрес Youtube в URL-адрес для встраивания со следующей функцией:

<?php

$url = 'https://www.youtube.com/watch?v=oVT78QcRQtU';

function getYoutubeEmbedUrl($url)
{
    $shortUrlRegex = '/youtu.be\/([a-zA-Z0-9_]+)\??/i';
    $longUrlRegex = '/youtube.com\/((?:embed)|(?:watch))((?:\?v\=)|(?:\/))(\w+)/i';

    if (preg_match($longUrlRegex, $url, $matches)) {
        $youtube_id = $matches[count($matches) - 1];
    }

    if (preg_match($shortUrlRegex, $url, $matches)) {
        $youtube_id = $matches[count($matches) - 1];
    }
    return 'https://www.youtube.com/embed/' . $youtube_id ;
}

getYoutubeEmbedUrl();

Однако при запуске я получаю следующую ошибку:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function getYoutubeEmbedUrl()

Я не понимаю, почему у меня слишком мало аргументов, когда у меня есть только один, и я его предоставил??

Онлайн-Редактируемая Демонстрация

Author: thatemployee, 2018-03-06

2 answers

Если вы определяете функцию в PHP, неглобальные переменные недоступны внутри функции.

Поэтому вы должны указать URL-адрес в качестве параметра функции (которую вы определили как $url).

Рабочее решение:

<?php

function getYoutubeEmbedUrl($url){
    $shortUrlRegex = '/youtu.be\/([a-zA-Z0-9_]+)\??/i';
    $longUrlRegex = '/youtube.com\/((?:embed)|(?:watch))((?:\?v\=)|(?:\/))(\w+)/i';

    if (preg_match($longUrlRegex, $url, $matches)) {
        $youtube_id = $matches[count($matches) - 1];
    }

    if (preg_match($shortUrlRegex, $url, $matches)) {
        $youtube_id = $matches[count($matches) - 1];
    }
    return 'https://www.youtube.com/embed/' . $youtube_id ;
}


$url = 'https://www.youtube.com/watch?v=oVT78QcRQtU';
$embeded_url = getYoutubeEmbedUrl($url);

echo $embeded_url;

Я не понимаю, почему у меня слишком мало аргументов, когда у меня есть только один, и я его предоставил??

Аргумент функции PHP всегда должен быть предоставлен с помощью вызова метода. Предопределенный переменные не используются функцией.

 1
Author: Sebastian Schneider, 2018-03-05 23:55:41

Я думаю, что вы не передаете аргумент при выполнении функции "getyoutubeembedurl()" в последней строке.

Попробуйте "echo getYoutubeEmbedUrl($url)";

 -1
Author: Smiya, 2018-03-06 00:15:55