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 是我得到的 $_FILES['image'] as var_dump

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 回答