Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal:php脚本的访问权限?_Drupal_Drupal 6 - Fatal编程技术网

Drupal:php脚本的访问权限?

Drupal:php脚本的访问权限?,drupal,drupal-6,Drupal,Drupal 6,我正在Drupal网站上编写一个定制php代码。我需要从PHP加载特定页面的内容 这些页面仅对经过身份验证的用户可见,而且似乎我无法从php访问它们,即使我在以用户身份登录时触发了脚本 有没有办法从php模拟“登录”用户,这样我就可以访问网站的所有内容 更新: global $user; if (user_access('access content')) { require_once("dompdf/dompdf_config.inc.php"); $html = file_get_con

我正在Drupal网站上编写一个定制php代码。我需要从PHP加载特定页面的内容

这些页面仅对经过身份验证的用户可见,而且似乎我无法从php访问它们,即使我在以用户身份登录时触发了脚本

有没有办法从php模拟“登录”用户,这样我就可以访问网站的所有内容

更新

global $user;
if (user_access('access content')) {

require_once("dompdf/dompdf_config.inc.php");

$html = file_get_contents('http://mywebsite.com/admin/store/orders/45/invoice/print');


$dompdf = new DOMPDF();
$dompdf->load_html($html);

//$dompdf->load_html_file('invoices/' . $file);
$dompdf->render();
$dompdf->stream("sample.pdf");
}
我试过使用相对路径,它是一样的

这是通过模拟管理员用户实现的

//access as administrator
global $user;
$original_user = $user;
session_save_session(FALSE); 
$user = user_load(array('uid' => 1));

//generate pdf
require_once("dompdf/dompdf_config.inc.php");
$html = file_get_contents('http://mywebsite/admin/store/orders/45/invoice/print');
$dompdf = new DOMPDF();
$dompdf->load_html($html);
//$dompdf->load_html_file('invoices/' . $file);
$dompdf->render();
$dompdf->stream("sample.pdf");

//logout as administrator
$user = $original_user;
session_save_session(TRUE); 
尽管如此,作为结果页面(和生成的pdf),我还是被拒绝访问。 谢谢

这样做的代码是:

<?php
if (user_access('access content')) {
  print "You have the permission 'access content'";
}
?>
这样做的代码是:

<?php
if (user_access('access content')) {
  print "You have the permission 'access content'";
}
?>

这些页面仅对经过身份验证的用户可见,而且似乎我无法从php访问它们,即使我在以用户身份登录时触发了脚本

Drupal使用全局变量
$user
检查用户是否具有查看节点的权限。要执行您正试图执行的操作,如果您不能相信当前登录的用户具有查看您感兴趣的节点的权限,则应阅读

我不是说你应该这样做。在模拟其他用户之前,我将验证以下方法是否是唯一可能的方法。 例如,如果只需要访问节点中包含的字段,则可以使用
node\u load()
,这不会验证当前用户是否可以查看加载的节点。 如果需要显示节点主体,可以使用以下代码:

$node = node_load($nid);
if ($node) {
  $body = check_markup($node->body, $node->format, FALSE);
}
但是,显示当前用户无权访问的信息被认为是一个安全问题

更新 代码的问题是您正在使用
file\u get\u contents('http://mywebsite/admin/store/orders/45/invoice/print)
;这样做,您将打开到站点的新连接,并且新连接将作为匿名用户打开。这就是未返回经过身份验证的用户能够看到的节点的原因。
即使代码可以工作,您得到的也不仅仅是呈现节点的HTML,还有整个页面,包括Drupal通常显示在顶部和左/右两侧的块

如果您对渲染节点感兴趣,那么应该使用以下代码。(这只是一个骨架,还不完整。)

这些页面仅对经过身份验证的用户可见,而且似乎我无法从php访问它们,即使我在以用户身份登录时触发了脚本

Drupal使用全局变量
$user
检查用户是否具有查看节点的权限。要执行您正试图执行的操作,如果您不能相信当前登录的用户具有查看您感兴趣的节点的权限,则应阅读

我不是说你应该这样做。在模拟其他用户之前,我将验证以下方法是否是唯一可能的方法。 例如,如果只需要访问节点中包含的字段,则可以使用
node\u load()
,这不会验证当前用户是否可以查看加载的节点。 如果需要显示节点主体,可以使用以下代码:

$node = node_load($nid);
if ($node) {
  $body = check_markup($node->body, $node->format, FALSE);
}
但是,显示当前用户无权访问的信息被认为是一个安全问题

更新 代码的问题是您正在使用
file\u get\u contents('http://mywebsite/admin/store/orders/45/invoice/print)
;这样做,您将打开到站点的新连接,并且新连接将作为匿名用户打开。这就是未返回经过身份验证的用户能够看到的节点的原因。
即使代码可以工作,您得到的也不仅仅是呈现节点的HTML,还有整个页面,包括Drupal通常显示在顶部和左/右两侧的块

如果您对渲染节点感兴趣,那么应该使用以下代码。(这只是一个骨架,还不完整。)

关于更新的代码。 您的文件内容将以“匿名用户”的身份获取内容。这只是代码不好的一个原因:

每当您的代码运行时,它都会打开您自己的站点并解析代码:导致至少两个“Drupal”被加载:实际上至少两个页面视图向用户显示一个页面。但这种方法可能会带来更多的问题

相反,您应该在中找到创建页面的代码/函数,并将其用作PDF创建者的输入。

关于更新的代码。 您的文件内容将以“匿名用户”的身份获取内容。这只是代码不好的一个原因:

每当您的代码运行时,它都会打开您自己的站点并解析代码:导致至少两个“Drupal”被加载:实际上至少两个页面视图向用户显示一个页面。但这种方法可能会带来更多的问题


相反,您应该在中找到创建页面的代码/函数,并将其用作PDF创建者的输入。

您好,谢谢您的回复。我已经在if语句之间添加了代码,但仍然不起作用。我得到“拒绝访问页面”。如果我复制url并使用浏览器访问它,它就会工作。(取而代之,我可以访问它)。请参阅更新问题中的代码。我已经试过了你的两个片段。谢谢你的回复。我已经在if语句之间添加了代码,但仍然不起作用。我得到“拒绝访问页面”。如果我复制url并使用浏览器访问它,它就会工作。(取而代之,我可以访问它)。请参阅更新问题中的代码。我已经试过了你的两个片段。谢谢,我试图冒充管理员用户,但仍然拒绝访问。。我真的不明白为什么,因为我可以从浏览器访问该页面,但不能从php脚本访问。我已经用代码更新了问题。我已经更新了答案,报告了方法中的错误以及如何解决问题。我已经用Ubercart API解决了问题,以获得发票html$invoice=uc\u order\u load_