2

画像のアップロードを処理するphpコードがあります。これで、このコードを処理するリモート投稿ができました。

$postheader = http_build_query($postarray);
$url = parse_url($uri);
$host = $url['host'];
$path = $url['path'];

$results = '';
if ($fp = fsockopen($host, 80, $errno, $errstr, 2))
{
    stream_set_timeout($fp, 30);

    $headers = "POST ". $path ." HTTP/1.0\r\n";     
    $headers .= "User-Agent: \r\n";
    $headers .= "Host: ". $host ."\r\n";
    $headers .= "Accept: */*\r\n";
    $headers .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $headers .= "Content-Length: " . strlen($postheader) . "\r\n";
    $headers .= "Connection: close\r\n\r\n";
    @fputs($fp, $headers . $postheader);
    while($currentHeader = fgets($fp, 4096))
    {
        if (preg_match("/^\r?\n$/", $currentHeader)) { break; }
    }

    while(!@feof($fp))
    {
        $results .= @fgets($fp, 1024);
    }
    @fclose($fp);

その投稿から画像のURLを取得すると、次のように保存されます。

$file = 'http://someurl.ll/image.jpg'

そして、画像を処理するスクリプト:$_FILES['image']

今、私が$_FILES['image'] = $fileそれがもっと熱くなるべきであると言うことができるならば、それはそうではありません!$_FILES['image']データのURLだけでなく、生のアップロードデータも必要なのです

だから私は何が等しいのか知りたいのです$_FILES['image']が、それは何を作ることができます$file = 'http://someurl.ll/image.jpg'か?

更新:Hierは、var_dumpとして$_FILES['image']として取得したものです。

array(5) { ["name"]=> string(17) "logo.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(14) "/tmp/phpWUqC5c" ["error"]=> int(0) ["size"]=> int(5674) }

同じものを作成したいのですが、$ file ='http://someurl.ll/image.jpg'から同じ配列を作成して、次のように言います。

$_FILES['image'] = that array from http://someurl.ll/image.jpg

リモートなので、$ _ FILES ['image']として処理したいのですが、簡単な解決策は、そのリモートイメージを$_FILES['image']と同じにすることです。

4

1 に答える 1

18

この関数をソースに追加します

/**
 * Add to $_FILES from external url
 * sample usage: addToFiles('google_favicon', 'http://google.com/favicon.ico');
 * @since 17.12.12 17:23
 * @author mekegi
 * @param string $key
 * @param string $url sample http://some.tld/path/to/file.ext
 */
function addToFiles($key, $url)
{
    $tempName = tempnam('/tmp', 'php_files');
    $originalName = basename(parse_url($url, PHP_URL_PATH));

    $imgRawData = file_get_contents($url);
    file_put_contents($tempName, $imgRawData);
    $_FILES[$key] = array(
        'name' => $originalName,
        'type' => mime_content_type($tempName),
        'tmp_name' => $tempName,
        'error' => 0,
        'size' => strlen($imgRawData),
    );
}

そして使用:

addToFiles('image', 'http://someurl.ll/image.jpg');
于 2012-12-17T13:40:43.063 に答える