HttpClient类库增加upload方法

HttpClient 类库将增加 upload 方法,目前可在3.1分支中获取,将同3.0正式版一起发布。

分支地址 https://github.com/breath-co2/myqee/tree/v3/3.1

可实现上传文件功能,使用方法:

HttpClient::factory()->upload('http://localhost/up.php', '/tmp/test.jpg');

其中 http://localhost/up.php 为接收上传文件的URL,/tmp/test.jpg 为待上次的文件路径

另外,upload 方法还支持同时post一些数据,比如:

HttpClient::factory()->upload('http://localhost/up.php', '/tmp/test.jpg', 'upload', array('a'=>1, 'b'=>2));

等同于

HttpClient::factory()
->add_file('/tmp/test.jpg', 'upload')
->post('http://localhost/up.php', array('a'=>1, 'b'=>2));

代码片段:返回一个目录的相对目录

/**
 * 求相对路径
 *
 *      $a = '/a/b/c/a.php';
 *      $b = '/a/b/e/b.php';
 *      echo self::relative_path($a, $b);
 *      // 将输出 ../../c/a.php
 *
 * @param string $a 目标路径
 * @param string $b 相对路径
 * @return string
 */

function relative_path($a, $b)
{
    $str = '';
    $a = explode('/', ltrim(str_replace('\\', '/', $a), '/'));
    $b = explode('/', ltrim(str_replace('\\', '/', $b), '/'));

    $intersect = array_intersect_assoc($a, $b);

    if($intersect)
    {
        $j   = -1;
        $num = 0;
        foreach ($intersect as $k => $v)
        {
            if($k-1 != $j)
            {
                break;
            }
            else
            {
                $str .= '..'. DIRECTORY_SEPARATOR;
            }

            $j = $k;
            $num++;
        }
        $ret = array_slice($a, $num);

        return $str . implode(DIRECTORY_SEPARATOR, $ret);
    }
}

调用方法:

$a = '/a/b/c/a.php';
$b = '/a/b/e/b.php';
echo relative_path($a, $b);
// 将输出 ../../c/a.php