- $lastLine = exec($cmd, $output, $exitCode);
- if ($exitCode !== 0) {
- if ($exitCode === 127) {
- errorOut(
- 'youtube-dl not found at ' . $youtubedlPath,
- '500 youtube-dl not found'
- );
- } else if (strpos($lastLine, 'Unsupported URL') !== false) {
- errorOut(
- 'Unsupported URL at ' . $pageUrl,
- '406 Unsupported URL (No video found)'
- );
- } else {
- errorOut('youtube-dl error: ' . $lastLine);
- }
+ $descriptors = [
+ 1 => ['pipe', 'w'],//stdout
+ 2 => ['pipe', 'w'],//stderr
+ ];
+ $proc = proc_open($cmd, $descriptors, $pipes);
+ if ($proc === false) {
+ errorOut('Error running youtube-dl');
+ }
+ $stdout = stream_get_contents($pipes[1]);
+ $stderr = stream_get_contents($pipes[2]);
+
+ $exitCode = proc_close($proc);
+
+ if ($exitCode === 0) {
+ //stdout contains the JSON data
+ return $stdout;
+ }
+
+ if (strlen($stderr)) {
+ $lines = explode("\n", trim($stderr));
+ $lastLine = end($lines);
+ } else {
+ $lines = explode("\n", trim($stdout));
+ $lastLine = end($lines);
+ }
+
+ if ($exitCode === 127) {
+ errorOut(
+ 'youtube-dl not found at ' . $youtubedlPath,
+ '500 youtube-dl not found'
+ );
+ } else if (strpos($lastLine, 'Unsupported URL') !== false) {
+ errorOut(
+ 'Unsupported URL at ' . $pageUrl,
+ '406 Unsupported URL (No video found)'
+ );