两个代码理论上相同但实际上工作不同......这怎么可能
two codes Theoreticaly same but practicaly works different...how is it possible
getaudio.php 版本 1
<?php
$youtubeUrl = $_GET['url'];
$content = shell_exec("youtube-dl -j $youtubeUrl ");
$meta=json_decode($content);
$file= $meta->{'_filename'};
$fileWithoutExtension = explode(".",$file)[0];
$extension = ".m4a";
$file = $fileWithoutExtension . $extension;
header("Content-Disposition: attachment; filename=\"$file\"" );
header("Content-Type: application/octet-stream");
passthru("youtube-dl -f 140 -o - $youtubeUrl");
?>
getaudio.php 版本 2
<?php
$youtubeUrl = $_GET['url'];
$file = shell_exec("youtube-dl -f 140 --get-filename $youtubeUrl ");
header("Content-Disposition: attachment; filename=\"$file\"" );
header("Content-Type: application/octet-stream");
passthru("youtube-dl -f 140 -o - $youtubeUrl");
?>
如果
url = https://www.youtube.com/watch?v=bvYtKY-UMxA 然后我们得到 $file =
Deewana Kar Raha Hai 全曲 1080p HD Raaz 3 2012 YouTube-bvYtKY-UMxA.m4a
我的问题是 getaudio.php 版本 1 工作正常,但 getaudio.php 版本 2 不行。 ...
getaudio.php 版本 2 正在下载,但文件已损坏....
当两个 php 文件的 $file 相同时,第二个文件怎么可能不起作用
提示:下载 youtube-dl.exe(对于 windows)& place 它与 两个 php 文件 & 运行 在本地主机
<?php
$youtubeUrl = "https://www.youtube.com/watch?v=bvYtKY-UMxA";
$content = shell_exec("youtube-dl -j $youtubeUrl ");
$meta=json_decode($content);
$file= $meta->{'_filename'};
$fileWithoutExtension = explode(".",$file)[0];
$extension = ".m4a";
$file1 = $fileWithoutExtension . $extension;
$file2 = shell_exec("youtube-dl -f 140 --get-filename $youtubeUrl ");
echo $file1,"NO SPACE HERE";
echo "<br>";
// have extra space at the end
echo $file2,"SPACE HERE";
echo "<br>";
echo "length of $file1 is :".strlen($file1); // 77
echo "<br>";
echo "length of $file2 is :".strlen($file2); // 78
?>
输出
Deewana Kar Raha Hai Full Song 1080p HD Raaz 3 2012
YouTube-bvYtKY-UMxA.m4a---NO SPACE HERE
Deewana Kar Raha Hai Full Song 1080p HD Raaz 3 2012
YouTube-bvYtKY-UMxA.m4a ---SPACE HERE
length of $file1 is :77
length of $file2 is :78
看到 .m4a 后没有空格 $file1 但是 $file2 .m4a.
后有空格
这使它们成为两个不同的字符串
解决方案:
在 getaudio.php 版本 2
中对 $file 使用 trim() 函数
$file = trim($file);
getaudio.php 版本 1
<?php
$youtubeUrl = $_GET['url'];
$content = shell_exec("youtube-dl -j $youtubeUrl ");
$meta=json_decode($content);
$file= $meta->{'_filename'};
$fileWithoutExtension = explode(".",$file)[0];
$extension = ".m4a";
$file = $fileWithoutExtension . $extension;
header("Content-Disposition: attachment; filename=\"$file\"" );
header("Content-Type: application/octet-stream");
passthru("youtube-dl -f 140 -o - $youtubeUrl");
?>
getaudio.php 版本 2
<?php
$youtubeUrl = $_GET['url'];
$file = shell_exec("youtube-dl -f 140 --get-filename $youtubeUrl ");
header("Content-Disposition: attachment; filename=\"$file\"" );
header("Content-Type: application/octet-stream");
passthru("youtube-dl -f 140 -o - $youtubeUrl");
?>
如果 url = https://www.youtube.com/watch?v=bvYtKY-UMxA 然后我们得到 $file = Deewana Kar Raha Hai 全曲 1080p HD Raaz 3 2012 YouTube-bvYtKY-UMxA.m4a
我的问题是 getaudio.php 版本 1 工作正常,但 getaudio.php 版本 2 不行。 ...
getaudio.php 版本 2 正在下载,但文件已损坏....
当两个 php 文件的 $file 相同时,第二个文件怎么可能不起作用
提示:下载 youtube-dl.exe(对于 windows)& place 它与 两个 php 文件 & 运行 在本地主机
<?php
$youtubeUrl = "https://www.youtube.com/watch?v=bvYtKY-UMxA";
$content = shell_exec("youtube-dl -j $youtubeUrl ");
$meta=json_decode($content);
$file= $meta->{'_filename'};
$fileWithoutExtension = explode(".",$file)[0];
$extension = ".m4a";
$file1 = $fileWithoutExtension . $extension;
$file2 = shell_exec("youtube-dl -f 140 --get-filename $youtubeUrl ");
echo $file1,"NO SPACE HERE";
echo "<br>";
// have extra space at the end
echo $file2,"SPACE HERE";
echo "<br>";
echo "length of $file1 is :".strlen($file1); // 77
echo "<br>";
echo "length of $file2 is :".strlen($file2); // 78
?>
输出
Deewana Kar Raha Hai Full Song 1080p HD Raaz 3 2012 YouTube-bvYtKY-UMxA.m4a---NO SPACE HERE
Deewana Kar Raha Hai Full Song 1080p HD Raaz 3 2012 YouTube-bvYtKY-UMxA.m4a ---SPACE HERE
length of $file1 is :77
length of $file2 is :78
看到 .m4a 后没有空格 $file1 但是 $file2 .m4a.
后有空格这使它们成为两个不同的字符串
解决方案: 在 getaudio.php 版本 2
中对 $file 使用 trim() 函数$file = trim($file);