title: youtube videos downloading using php to server
body: <p>I am trying to download Youtube videos directly to hosting space. When i try the script on local server like xampp on my PC then it works well. but when i try the script on 000webhosting it do not works. It shows error like this </p>
  
  <p><a href="https://i.stack.imgur.com/Eyhkk.png" rel="nofollow noreferrer">See the problem i am having in this screen shot</a></p>
  
  <p>the error is like below.</p>
  
  <pre><strong>Uh oh, it looks like an error occurred:</strong> No MP4 video source was able to be located.</pre>
  
  <p>Below is PHP code for downloading Youtube video.</p>
  
  <pre><code>&lt;?php
  
  // What YouTube URL was provided to us?
  $url = (string) @$_GET['url'];
  
  /**
   * Define a function to extract a YouTube Video ID from a URL.
   *
   * @param    string    $url    A YouTube Video URL
   * @return    mixed            If successful, will return a string. If failed, will return NULL
   */
  
  function getYouTubeVideoIdFromUrl( $url )
  {
  preg_match( "/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&amp;)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&amp;\"'&gt;]+)/", $url, $matches );
  
  // If this match exists.
  if ( sizeof( $matches ) &gt;= 2 &amp;&amp; strlen( $matches[1] ) )
  {
      return $matches[1];
  }
  
  return NULL;
  }
  
  /**
  * Define a function to extract a YouTube encoded stream URL.
  *
  * @param    array    $streams    An array of streams provided to us from YouTube's "get_video_info" page.
  * @return    mixed                If successful, will return the MP4 stream URL. If failed, will return NULL
   */
  
  function getMP4FromEncodedStream( $streams )
  {
  foreach( $streams as $stream )
  {
      // Decode this stream's data.
      parse_str( $stream, $data );
  
      // If we found our MP4 stream source.
      if ( stripos( $data['type'], 'video/mp4' ) === 0 )
      {
          return $data['url'];
      }
  }
  
  // We didn't find any, whoops..
  return NULL;
  }
  
  // Try to validate their request.
  try
  {
  // If an invalid YouTube URL was provided.
  if ( ( $videoId = getYouTubeVideoIdFromUrl( $url ) ) === NULL )
  {
      throw new Exception( 'An invalid YouTube Video URL was provided.' );
  }
  
  // Retrieve all information pertaining to this Video; more specifically, we're looking for the encoded video streams.
  parse_str( file_get_contents( 'http://youtube.com/get_video_info?video_id=' . $videoId ), $videoData );
  
  // If there's a problem extracting information.
  if ( @$videoData['status'] == 'fail' )
  {
      throw new Exception( $videoData['reason'] );
  }
  
  // Were we able to locate an encoded stream in MP4 format?
  if ( ( $streamUrl = getMP4FromEncodedStream( explode( ',', $videoData['url_encoded_fmt_stream_map'] ) ) ) === NULL )
  {
      throw new Exception( 'No MP4 video source was able to be located.' );
  }
  
  // Where will we be saving this Video?
  $saveAs = dirname( __FILE__ ) . '/' . $videoId . '.mp4';
  
  // Try to open the encoded video stream URL.
  if ( $read = @fopen( $streamUrl, 'r' ) )
  {
      // Open the file we want to save to.
      $write = @fopen( $saveAs, 'w' );
  
      // Write the stream to our file.
      $streamReturn = stream_copy_to_stream( $read, $write );
  
      // Close our files.
      @fclose( $read );
      @fclose( $write );
  
      // If we were unable to copy from stream.
      if ( $streamReturn === false )
      {
          throw new Exception( 'We were unable to copy this from the stream.' );
      }
  }
  
  // If our new file doesn't exist, we have a problem.
  if ( !@file_exists( $saveAs ) )
  {
      throw new Exception( 'We encountered an issue saving this Video.' );
  }
  
  // Everything saved properly, let them know there they can see their file.
  print 'Your Video &lt;strong&gt;' . $videoId . '&lt;/strong&gt; has been saved to &lt;strong&gt;' . $saveAs . '&lt;/strong&gt;';
  }
  // If something went wrong.
  catch( Exception $e )
  {
  print '&lt;strong&gt;Uh oh, it looks like an error occurred:&lt;/strong&gt; ' . $e-&gt;getMessage( );
  }
  
  ?&gt;
  </code></pre>
  
  <p>All you need to do is copy this script to your webserver, and run the file with a URL like one of the following:</p>
  
  <pre><code>http://www.mywebserver.com/youtube-downloader.php?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ
  http://www.mywebserver.com/youtube-downloader.php?url=https://youtu.be/dQw4w9WgXcQ
  </code></pre>
  
  <p>All is working well but the videos are not downloading to online server, hosting space..</p>
  
  <p>help ..
  thanks in advance..</p>