PHP+;卷曲度+;乔姆拉

PHP+;卷曲度+;乔姆拉,php,curl,joomla,Php,Curl,Joomla,我正在尝试通过CURL从外部链接登录到Joomla 3。在从互联网上找到一些信息后,我通过一些修改获得了以下代码: <?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_VERIF

我正在尝试通过CURL从外部链接登录到Joomla 3。在从互联网上找到一些信息后,我通过一些修改获得了以下代码:

<?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);
?>

我获取了return&key,但无法登录。怎么了? 谢谢。

我修改了代码。 现在这项工作如期完成,谢谢大家的支持

<?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];
}

?>

您获得的输出是什么?打印($ret);不返回任何内容(空字符串)。curl调试的基础知识:
curl\u error()
dirname(\uuuuu FILE\uuuu)。“./cookie.txt”
指的是不存在的文件(
某些路径。/cookie.txt
)。您必须将其更改为
dirname(\uuuu文件)。“/cookie.txt”
Ah,这是我的错误,我已经更改了,但结果是一样的。