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()
Я не понимаю, почему у меня слишком мало аргументов, когда у меня есть только один, и я его предоставил??
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
всегда должен быть предоставлен с помощью вызова метода. Предопределенный переменные не используются функцией.
Я думаю, что вы не передаете аргумент при выполнении функции "getyoutubeembedurl()" в последней строке.
Попробуйте "echo getYoutubeEmbedUrl($url)";