我的代码:
require_once 'class-IXR.php'; $client = new IXR_Client("http://localhost/xmlrpc.php"); //上传图片 $filetext = @file_get_contents('http://misc.360buyimg.com/lib/img/e/logo-201305.png'); $data = array( 'name' => '3a5ca0ce9c1824876e531d1e05992232.jpg', 'type' => 'image/png', 'bits' => new IXR_Base64($filetext), 'overwrite' => false, ); $params = array(0,$user,$pwd,$data); $client->query('metaWeblog.newMediaObject', $params);//metaWeblog.newMediaObject 与wp.uploadFile 是同样的效果 $uploadimg = $client->getResponse(); print_r($uploadimg);
这个是再网上看到的一些代码。可以将文章中的远程图片转换为本地。
function wp_irx_uplad_file($body){ global $xmlclient,$username,$password; $imgtag = "<img"; $srctag = "src"; $pattern = '/src=\"(.*?)\"/'; $pattern = "/<img.+src=('|\"|)?(.*)(\\1)([\s].*)?>/ismUe"; //图片代码标签的正则表达式,子模式匹配src地址 if (strpos($body,$imgtag) && strpos($body,$srctag)) { preg_match_all ($pattern,$body,$matches); for ($i=0; $i< count($matches[0]); $i++) { $src = $matches[2][$i]; $imgsrc = $src; $temp = explode( "/", $src ); $name = trim( $temp[count( $temp ) - 1] );//名称 $filesrc = $src; if(function_exists('mime_content_type')){ $type = mime_content_type($filesrc);//只支持php5.2以下 获取文件类型 }else{ $finfo = finfo_open(FILEINFO_MIME); $type = finfo_file($finfo, $filesrc);//获取文件类型 finfo_close($finfo); } if(function_exists('file_get_contents')) { $bits = new IXR_Base64( file_get_contents($filesrc)); //图片内容需要转成base64, } $data = array( 'name'=> $name, 'type'=> $type, 'bits'=> $bits, ); $client = new IXR_Client($xmlclient); $fileparams = array(0,$username,$password,$data); if (!$client->query('metaWeblog.newMediaObject', $fileparams)) { die('Something went wrong – '.$client->getErrorCode().' : '.$client->getErrorMessage()); $returnurl=""; } elseif ($client->getResponse()) { $response = $client->getResponse(); $returnurl = $response['url'];//获取新的图片地址 } $body = str_replace($imgsrc,$returnurl,$body); //替换内容中的图片地址 } return $body; } <p>//样例 define('KC_FILE_COMMAND', '/usr/bin/file -ib "%s"');//用于获取文件类型 require_once('class-IRX.php'); $client->debug = true; //开发测试时设置为true,api完成上线后改为false $username = "admin"; //用户名 $password = 'admin888';//密码 $wpsite = 'http://softuses.com'; //改成自己的 $xmlclient = $wpsite."/xmlrpc.php"; $body="这是一个测试的样例.<img src='http://softuses.com/wp-content/themes/softuses/images/bg.jpg' border=0/>" echo "原内容:".$body; echo "<hr>"; echo "新内容:".wp_irx_uplad_file($body);</p>
转载请注明:夜阑小雨 » wordpress远程发布上传图片–php