rtorrent是unix下面一個lightweight but powerful的BT Client. 跟許多console mode軟體不同的是, 他提供完整的xmlrpc api讓developer可以開發自己的interface來管理使用rtorrent.
我選用了rtgui, 本來以為只要幾分鐘就可以設定好, 沒想到卻遇到不能預期的錯誤, trace一下才發現原來是 file_get_contents這個function在PHP 5.0.0以後才support $context這個參數.
所以只好自己用curl hack一個給PHP < 5.0.0可以動的版本. (需要有curl extension) 目前用起來是沒遇到任何問題, 搞定收工.
Here is the hack (把functions.php裡面的do_xmlrpc整段換成):
function do_xmlrpc($request) {
global $rpc_connect;
if (version_compare(PHP_VERSION, '5.0.0', '>=')) {
$file = file_get_contents($rpc_connect, false, $context);
}else if(version_compare(PHP_VERSION, '5.0.0', '<') &&
extension_loaded('curl')){
$c = curl_init();
$post_data = array('content' => $request);
curl_setopt($c, CURLOPT_URL, $rpc_connect);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, $request);
curl_setopt($c, CURLOPT_TIMEOUT, 5);
curl_setopt($c, CURLE_OPERATION_TIMEOUTED, 5);
$file = curl_exec($c);
curl_close($c);
}else{
die ("<h1>Please use PHP 5+ or enable cURL extension
</h1>");
}
$file=str_replace("i8","double",$file);
return xmlrpc_decode($file);
}
