将巴什中的卷曲转换为php

好吧,这是我在bash中的cURL脚本,可以正常工作!


#!/bin/bash

fileid="1yvklOFopnep8twiqAQecmMUoAbQVzU0r"

filename="MyFile.mp4"

curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null

curl -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仍然为空?


陪伴而非守候
浏览 174回答 2
2回答

一只斗牛犬

您似乎在这里以无效的方式混合了几个选项。由于您设置了数据,因此由&nbsp;返回。CURLOPT_RETURNTRANSFERcurl_exec()所以$data&nbsp;=&nbsp;curl_exec($ch); fwrite($GlobalFileHandle,&nbsp;$data);应该做这个伎俩。如果要使用回调,则根本不设置。CURLOPT_RETURNTRANSFER另一个选项是,设置为将数据直接写入文件句柄(则不要设置):CURLOPT_FILECURLOPT_RETURNTRANSFERcurl_setopt(CURL_FILE,&nbsp;$GlobalFileHandle);此外,您需要将 设置为您的饼干,以便正确读取饼干。该选项仅设置存储&nbsp;Cookie 的文件。您需要两者,因此请添加:CURLOPT_COOKIEFILECURLOPT_COOKIEJARcurl_setopt(CURL_COOKIEFILE,&nbsp;'cookies.txt');有关更多详细信息,请参阅&nbsp;PHP 手册页curl_setopt

慕桂英4014372

似乎函数中缺少一个。curl_execget_file
打开App,查看更多内容
随时随地看视频慕课网APP