Подключение класса

#1 23 марта 2014 в 19:05
Здравствуйте. Нашёл класс (рабочий) для вставки видео и превью с основных сервисов в любом месте сайта. При подключении ыдаёт ошибку:Array ( [error] => Вы забыли указать ссылку на видео. ). Подскажите что поправить.
Класс
  1. <?php
  2.  
  3. class videoThumb {
  4.  
  5. var $config;
  6.  
  7. function __construct($config = array()) {
  8. $this->config = array_merge(array(
  9. 'imagesPath' => PATH. '/images/'
  10. ,'imagesUrl' => '/images/video/'
  11. ,'emptyImage' => '/images/video/nopic.jpg'
  12. ),$config);
  13.  
  14. if (!is_dir($this->config['imagesPath'])) {
  15. mkdir($this->config['imagesPath']);
  16. }
  17. }
  18.  
  19. /*
  20. * Return error message from lexicon array
  21. * @param string $msg Array key
  22. * @return string Message
  23. * */
  24. function lexicon($msg = '') {
  25. $array = array(
  26. 'video_err_ns' => 'Вы забыли указать ссылку на видео.'
  27. ,'video_err_nf' => 'Не могу найти видео, может - неверная ссылка?'
  28. );
  29.  
  30. return @$array[$msg];
  31. }
  32.  
  33.  
  34. /*
  35. * Check and format video link, then fire download of preview image
  36. * @param string $video Remote url on video hosting
  37. * @return array $array Array with formatted video link and preview url
  38. * */
  39. function process($video = '') {
  40. if (empty($video)) {return array('error' => $this->lexicon('video_err_ns'));}
  41. if (!preg_match('/^(http|https)\:\/\//i', $video)) {
  42. $video = 'http://' . $video;
  43. }
  44. // YouTube
  45. if (preg_match('/[http|https]+:\/\/(?:www\.|)youtube\.com\/watch\?(?:.*)?v=([a-zA-Z0-9_\-]+)/i', $video, $matches) || preg_match('/[http|https]+:\/\/(?:www\.|)youtube\.com\/embed\/([a-zA-Z0-9_\-]+)/i', $video, $matches) || preg_match('/[http|https]+:\/\/(?:www\.|)youtu\.be\/([a-zA-Z0-9_\-]+)/i', $video, $matches)) {
  46. $video = 'http://www.youtube.com/embed/'.$matches[1];
  47. $image = 'http://img.youtube.com/vi/'.$matches[1].'/0.jpg';
  48.  
  49. $array = array(
  50. 'video' => $video
  51. ,'image' => $this->getRemoteImage($image)
  52. );
  53. }
  54. // Vimeo
  55. else if (preg_match('/[http|https]+:\/\/(?:www\.|)vimeo\.com\/([a-zA-Z0-9_\-]+)(&.+)?/i', $video, $matches) || preg_match('/[http|https]+:\/\/player\.vimeo\.com\/video\/([a-zA-Z0-9_\-]+)(&.+)?/i', $video, $matches)) {
  56. $video = 'http://player.vimeo.com/video/'.$matches[1];
  57. $image = '';
  58. if ($xml = simplexml_load_file('http://vimeo.com/api/v2/video/'.$matches[1].'.xml')) {
  59. $image = $xml->video->thumbnail_large ? (string) $xml->video->thumbnail_large: (string) $xml->video->thumbnail_medium;
  60. $image = $this->getRemoteImage($image);
  61. }
  62. $array = array(
  63. 'video' => $video
  64. ,'image' => $image
  65. );
  66. }
  67. // ruTube
  68. else if (preg_match('/[http|https]+:\/\/(?:www\.|)rutube\.ru\/video\/embed\/([a-zA-Z0-9_\-]+)/i', $video, $matches) || preg_match('/[http|https]+:\/\/(?:www\.|)rutube\.ru\/tracks\/([a-zA-Z0-9_\-]+)(&.+)?/i', $video, $matches)) {
  69. $video = 'http://rutube.ru/video/embed/'.$matches[1];
  70. $image = '';
  71. if ($xml = simplexml_load_file("http://rutube.ru/cgi-bin/xmlapi.cgi?rt_mode=movie&rt_movie_id=".$matches[1]."&utf=1")) {
  72. $image = (string) $xml->movie->thumbnailLink;
  73. $image = $this->getRemoteImage($image);
  74. }
  75. $array = array(
  76. 'video' => $video
  77. ,'image' => $image
  78. );
  79. }
  80. else if (preg_match('/[http|https]+:\/\/(?:www\.|)rutube\.ru\/video\/([a-zA-Z0-9_\-]+)\//i', $video, $matches)) {
  81. $html = $this->Curl($matches[0]);
  82. return $this->process($html);
  83. }
  84. // No matches
  85. else {
  86. $array = array('error' => $this->lexicon('video_err_nf'));
  87. }
  88.  
  89. return $array;
  90. }
  91.  
  92. /*
  93. * Download ans save image from remote service
  94. * @param string $url Remote url
  95. * @return string $image Url to image or false
  96. * */
  97. function getRemoteImage($url = '') {
  98. if (empty($url)) {return false;}
  99.  
  100. $image = '';
  101. $response = $this->Curl($url);
  102. if (!empty($response)) {
  103. $tmp = explode('.', $url);
  104. $ext = '.' . end($tmp);
  105.  
  106. $filename = md5($url) . $ext;
  107. if (file_put_contents($this->config['imagesPath'] . $filename, $response)) {
  108. $image = $this->config['imagesUrl'] . $filename;
  109. }
  110.  
  111. }
  112. if (empty($image)) {$image = $this->config['emptyImage'];}
  113.  
  114. return $image;
  115. }
  116.  
  117. /*
  118. * Method for loading remote url
  119. * @param string $url Remote url
  120. * @return mixed $data Results of an request
  121. * */
  122. function Curl($url = '') {
  123. if (empty($url)) {return false;}
  124.  
  125. $ch = curl_init();
  126. curl_setopt($ch, CURLOPT_URL, $url);
  127. curl_setopt($ch, CURLOPT_FAILONERROR, 1);
  128. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  129. curl_setopt($ch, CURLOPT_TIMEOUT, 3);
  130.  
  131. $data = curl_exec($ch);
  132. return $data;
  133. }
  134. }
Поключение
  1. <?php
  2. require 'videothumb.class.php';
  3. $url = isset($_GET['url']) ? trim($_GET['url']) : '';
  4.  
  5. $class = new videoThumb(array(
  6. 'imagesPath' => PATH. '/images/'
  7. ,'imagesUrl' => '/images/'
  8. ,'emptyImage' => 'images/video/nopic.jpg'
  9. ));
  10. $video = $class->process($url);
  11.  
  12. print_r($video);
  13. ?>
#2 23 марта 2014 в 20:27

При подключении ыдаёт ошибку:Array ( [error] => Вы забыли указать ссылку на видео. ).

Lora
Думаю всё дело в $url, вернее в $_GET['url']. Что и как передаете в параметре $_GET['url']?
Попробуйте вывести:
  1. var_dump($_GET['url']);
#3 23 марта 2014 в 20:47
NULL
#4 23 марта 2014 в 20:49

NULL

Lora
А на первый вопрос

Что и как передаете в параметре $_GET['url']?

Марат

какой ответ?
#5 23 марта 2014 в 21:04
С первым не разобраться никак.Не могу понять как его вообще передать.
#6 23 марта 2014 в 22:05
Поясните, что я не так делаю, (кроме того что учу php smile).

Создал модуль с формой

  1. <form action="includes/myphp/test.php" method="GET" >
  2. Введите адресс <input type="text" name="num" value="" /><br/>
  3. <input type="submit" name="bsubmit" value="Отправить" />
  4. </form>
В test.php это

  1. <?php
  2. require 'videothumb.class.php';
  3. $url = isset($_GET['url']) ? trim($_GET['url']) : '';
  4.  
  5. $class = new videoThumb(array(
  6. 'imagesPath' => PATH. '/images/'
  7. ,'imagesUrl' => '/images/'
  8. ,'emptyImage' => 'images/video/nopic.jpg'
  9. ));
  10. $video = $class->process($url);
  11.  
  12. print_r($video);
  13. ?>
Ввожу в форме адресс ютуба. Зависает белая страница.
#7 23 марта 2014 в 22:11
Да для начала всё правильно делаете. Просто в форме название инпута не то, что надо. У вас name="num", а нужно name="url". Вот же $_GET['url']. То есть будет так:
  1.  
  2. <form action="includes/myphp/test.php" method="GET" >
  3. Введите адресс <input type="text" name="url" value="" /><br/>
  4. <input type="submit" name="bsubmit" value="Отправить" />
  5. </form>
  6.  
#9 24 марта 2014 в 23:24
Со скриптом разобрался. Осталась проблема самого подключения.Т.е.не могу подключить сам файл с классом.Если всё в одном файле, работает как надо, а если выношу класс в отдельный файл не работает ( белая страница). Видимо при подключении что то надо указать. Подскажите что?.. Подключаюсь так: require 'videothumb.class.php';
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.