こちらの方と全く同じ症状、エラーで悩んでおりました。
参考までにPHPはVersion 5.2.1、XML_RPC-1.5.1を使用しております。
ご教授のほど、よろしくお願い致します。
出ているのはエラーではなく,ワーニングなので,動作自体は問題ないです.
ただ,やり取りはUTF-8で行う必要があるので,そのスクリプトをUTF-8で保存してください.
すると問題なく,記事が投稿されているはずです.
また,ワーニング自体は,コードを読む限りデバッグ出力のためにエンコード変換をしているところで出ていますので,その行を削除してしまって構わないです.
具体的には
<?php require_once("XML/RPC.php"); //XML-RPC package 読み込み $GLOBALS['XML_RPC_defencoding'] = "UTF-8"; //XML-RPCインタフェース、ユーザ定義 $fc2_host = "blog.fc2.com"; $fc2_xmlrpc_path = "/xmlrpc.php"; $fc2_user = "ここにID"; $fc2_passwd = "ここにパスワード"; $bm = new BlogManager(); $bm->post_blog("PHPから投稿テスト3-Title","PHPから投稿テスト3-Dsescription <br/>改行コード埋め込み \n なんかいけてそう"); class BlogManager { function post_blog($title,$content){ global $fc2_xmlrpc_path,$fc2_host,$fc2_user,$fc2_passwd; //クライアントの作成 echo "クライアント作成<br\n>"; $c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 ); //送信データ $blogid = new XML_RPC_Value( 0, 'string'); $username = new XML_RPC_Value($fc2_user, 'string'); $passwd = new XML_RPC_Value($fc2_passwd, 'string'); $content = new XML_RPC_Value(array( 'title'=> new XML_RPC_Value($title, 'string'), 'description'=> new XML_RPC_Value($content, 'string'), 'dateCreated'=> new XML_RPC_Value(date("Ymd\TH:i:s",time()), 'dateTime.iso8601') ), 'struct'); $publish = new XML_RPC_Value( 1, 'boolean'); //XML-RPCメソッドのセット $message = new XML_RPC_Message( 'metaWeblog.newPost', array($blogid, $username, $passwd, $content, $publish) ); $this->send_message($c,$message); } function get_users_blogs(){ global $fc2_xmlrpc_path,$fc2_host,$fc2_user,$fc2_passwd; //クライアントの作成 echo "クライアント作成<br\n>"; $c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 ); $appkey = new XML_RPC_Value( '', 'string' ); $username = new XML_RPC_Value( $fc2_user, 'string' ); $passwd = new XML_RPC_Value( $fc2_passwd, 'string' ); //メッセージ作成 echo "メッセージ作成<br\n>"; $message = new XML_RPC_Message( "blogger.getUsersBlogs",array($appkey, $username, $passwd) ); $this->send_message($c,$message); } function send_message($c,$message){ //print_r($c); //print_r($message); //メッセージ送信 echo "メッセージ送信<br\n>"; $result = $c->send($message); if( !$result ){ exit('Could not connect to the server.'); }else if( $result->faultCode() ){ exit('XML-RPC fault ('.$result->faultCode().'): ' .$result->faultString()); } return XML_RPC_decode( $result->value() ); } function array_convEnc($a){ if( is_array($a) ){ return array_map( 'array_convEnc', $a ); } return mb_convert_encoding( $a, mb_internal_encoding(), $GLOBALS['XML_RPC_defencoding'] ); } } ?>
で動きます.
出ているのはエラーではなく,ワーニングなので,動作自体は問題ないです.
ただ,やり取りはUTF-8で行う必要があるので,そのスクリプトをUTF-8で保存してください.
すると問題なく,記事が投稿されているはずです.
また,ワーニング自体は,コードを読む限りデバッグ出力のためにエンコード変換をしているところで出ていますので,その行を削除してしまって構わないです.
具体的には
<?php require_once("XML/RPC.php"); //XML-RPC package 読み込み $GLOBALS['XML_RPC_defencoding'] = "UTF-8"; //XML-RPCインタフェース、ユーザ定義 $fc2_host = "blog.fc2.com"; $fc2_xmlrpc_path = "/xmlrpc.php"; $fc2_user = "ここにID"; $fc2_passwd = "ここにパスワード"; $bm = new BlogManager(); $bm->post_blog("PHPから投稿テスト3-Title","PHPから投稿テスト3-Dsescription <br/>改行コード埋め込み \n なんかいけてそう"); class BlogManager { function post_blog($title,$content){ global $fc2_xmlrpc_path,$fc2_host,$fc2_user,$fc2_passwd; //クライアントの作成 echo "クライアント作成<br\n>"; $c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 ); //送信データ $blogid = new XML_RPC_Value( 0, 'string'); $username = new XML_RPC_Value($fc2_user, 'string'); $passwd = new XML_RPC_Value($fc2_passwd, 'string'); $content = new XML_RPC_Value(array( 'title'=> new XML_RPC_Value($title, 'string'), 'description'=> new XML_RPC_Value($content, 'string'), 'dateCreated'=> new XML_RPC_Value(date("Ymd\TH:i:s",time()), 'dateTime.iso8601') ), 'struct'); $publish = new XML_RPC_Value( 1, 'boolean'); //XML-RPCメソッドのセット $message = new XML_RPC_Message( 'metaWeblog.newPost', array($blogid, $username, $passwd, $content, $publish) ); $this->send_message($c,$message); } function get_users_blogs(){ global $fc2_xmlrpc_path,$fc2_host,$fc2_user,$fc2_passwd; //クライアントの作成 echo "クライアント作成<br\n>"; $c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 ); $appkey = new XML_RPC_Value( '', 'string' ); $username = new XML_RPC_Value( $fc2_user, 'string' ); $passwd = new XML_RPC_Value( $fc2_passwd, 'string' ); //メッセージ作成 echo "メッセージ作成<br\n>"; $message = new XML_RPC_Message( "blogger.getUsersBlogs",array($appkey, $username, $passwd) ); $this->send_message($c,$message); } function send_message($c,$message){ //print_r($c); //print_r($message); //メッセージ送信 echo "メッセージ送信<br\n>"; $result = $c->send($message); if( !$result ){ exit('Could not connect to the server.'); }else if( $result->faultCode() ){ exit('XML-RPC fault ('.$result->faultCode().'): ' .$result->faultString()); } return XML_RPC_decode( $result->value() ); } function array_convEnc($a){ if( is_array($a) ){ return array_map( 'array_convEnc', $a ); } return mb_convert_encoding( $a, mb_internal_encoding(), $GLOBALS['XML_RPC_defencoding'] ); } } ?>
で動きます.
ありがとうございます!!
UTFで保存はもちろん、エディタを秀丸からテラパッドに変えたりいろいろ試しても
駄目だったのですが、ご教授頂いたソースで一発でワーニングが出なくなりました。
感謝致します!!
ご丁寧にありがとうございます。
こちらの情報も参考にさせて頂きます。
ありがとうございます!!
UTFで保存はもちろん、エディタを秀丸からテラパッドに変えたりいろいろ試しても
駄目だったのですが、ご教授頂いたソースで一発でワーニングが出なくなりました。
感謝致します!!