2014-02-18 3 views
1

Я пробовал войти в Joomla 3 из-за внешней ссылки через CURL. После некоторого нахождения из Интернета я получить этот код с некоторой адаптацией:PHP + CURL + JOOMLA

<?php 
$uname = "admin"; 
$upswd = "admin"; 
$url = "http://localhost/joomla3/en/component/users"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt'); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 

$results = curl_exec($ch); 

preg_match_all("(<input type=\"hidden\" name=\"return\" value=\"(.*)\" />)siU", $results, $matches1); 
preg_match_all("(<input type=\"hidden\" name=\"(.*)\" value=\"1\" />(.*)</fieldset>)iU", $results, $matches2); 

var_dump($matches1[1][0]); 
var_dump($matches2[1][0]); 

// POST fields 
$postfields = array(); 
$postfields['lang'] = 'en'; 
$postfields['option'] = 'com_users'; 
$postfields['view'] = 'login'; 
$postfields['task'] = 'user.login'; 
$postfields['username'] = urlencode($uname); 
$postfields['password'] = urlencode($upswd); 
$postfields['return'] = urlencode($matches1[1][0]); 
$postfields[urlencode($matches2[1][0])] = '1'; 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 
$ret = curl_exec($ch); 
print_r($ret); 
?> 

я получить обратный & ключ, но не могу войти. Что не так? Спасибо.

+0

Какой результат вы получили? – Raptor

+0

print_r ($ ret); return nothing (пустая строка). –

+1

основы отладки curl: 'curl_error()': http://www.php.net/manual/en/function.curl-error.php – Raptor

ответ

2

Я изменил код. Теперь эта работа как и ожидалось, спасибо за поддержку.

<?php 
$uname = "admin"; 
$upswd = "admin"; 
$url_get_key = "http://localhost/joomla3/index.php?option=com_users&lang=en"; //MOD REWRITE Disabled 

//GET return & key 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url_get_key); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt'); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

$results = curl_exec($ch); 

preg_match_all("(<input type=\"hidden\" name=\"return\" value=\"(.*)\" />)siU", $results, $matches1); 
preg_match_all("(<input type=\"hidden\" name=\"(.*)\" value=\"1\" />(.*)</fieldset>)iU", $results, $matches2); 

//var_dump($matches1[1][0]); 
//var_dump($matches2[1][0]); 

// POST 
$url_post = "http://localhost/joomla3/index.php?option=com_users&task=user.login&lang=en"; 
$postdata = "username=".urlencode($uname)."&password=".urlencode($upswd)."&return=".urlencode($matches1[1][0])."&".urlencode($matches2[1][0])."=1"; 
curl_setopt($ch, CURLOPT_URL, $url_post); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); 
$results1 = curl_exec($ch); 

$url_data = "http://localhost/joomla3/index.php?option=com_users&lang=en"; //MOD REWRITE Disabled 
curl_setopt($ch, CURLOPT_URL, $url_data); 

$results2 = curl_exec($ch); 
$error = curl_error($ch); 
$errno = curl_errno($ch); 
echo ($error); 

curl_close($ch); 

//IF incorrect password 
if(@preg_match('#<div id="system-message">(.*)<p>(.*)</p>#siU', $results2, $matches3)){ 
    @preg_match('#<p>(.*)</p>#i', $matches3[0], $matches4); 
    echo $matches4[0]; 
} 

//IF Logged In 
if(@preg_match('#<div class="login-greeting">(.*)</div>#siU', $results2, $matches5)){ 
    echo $matches5[1]; 
} 

?> 
Смежные вопросы