为了账号安全,请及时绑定邮箱和手机立即绑定

将巴什中的卷曲转换为php

将巴什中的卷曲转换为php

PHP
陪伴而非守候 2022-09-17 22:07:35
好吧,这是我在bash中的cURL脚本,可以正常工作!#!/bin/bashfileid="1yvklOFopnep8twiqAQecmMUoAbQVzU0r"filename="MyFile.mp4"curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/nullcurl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}但是,我试图将其重写为一个简单的PHP脚本,尽管它似乎无法正常工作;代码如下:<?php    define('FILENAME', 'MyFile.mp4');    define('FILE_ID', '1yvklOFopnep8twiqAQecmMUoAbQVzU0r');    $GlobalFileHandle = null;    function get_confirm($id)    {        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, "https://drive.google.com/uc?export=download&id=".$id);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');        $result = curl_exec($ch);        if (curl_errno($ch)) {            echo 'Error:' . curl_error($ch);        }        curl_close($ch);        preg_match_all("/confirm=([0-9A-Za-z]+)&/", $result, $output_array);        return $output_array[1][0];    }    function get_file($id, $confirm)    {        global $GlobalFileHandle;        $GlobalFileHandle = fopen(FILENAME, 'w+');        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, 'https://drive.google.com/uc?export=download&confirm='.$confirm.'&id='.$id);        curl_setopt($ch, CURLOPT_FILE, $GlobalFileHandle);        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'curlWriteFile');        curl_exec($ch);        if (curl_errno($ch)) {            echo 'Error:' . curl_error($ch);        }        curl_close($ch);        fclose($GlobalFileHandle);    }但是,文件似乎没有被下载 &'我的文件.mp4仍然为空?
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您似乎在这里以无效的方式混合了几个选项。

由于您设置了数据,因此由 返回CURLOPT_RETURNTRANSFERcurl_exec()

所以

$data = curl_exec($ch);
fwrite($GlobalFileHandle, $data);

应该做这个伎俩。如果要使用回调,则根本不设置。CURLOPT_RETURNTRANSFER

另一个选项是,设置为将数据直接写入文件句柄(则不要设置):CURLOPT_FILECURLOPT_RETURNTRANSFER

curl_setopt(CURL_FILE, $GlobalFileHandle);

此外,您需要将 设置为您的饼干,以便正确读取饼干。该选项仅设置存储 Cookie 的文件。您需要两者,因此请添加CURLOPT_COOKIEFILECURLOPT_COOKIEJAR

curl_setopt(CURL_COOKIEFILE, 'cookies.txt');

有关更多详细信息,请参阅 PHP 手册页curl_setopt


查看完整回答
反对 回复 2022-09-17
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

似乎函数中缺少一个。curl_execget_file



查看完整回答
反对 回复 2022-09-17
  • 2 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号