PHP重定向问题

时间:2011-11-28 19:29:48

标签: php

我有一个打印用户ID列表报告的程序。该程序应该为上传的列表中的用户逐个打印报告。问题是当我运行打印过程并使用indexInList = 30打印报表时,我收到错误:

  

此网页有重定向循环
  http://127.0.0.1/content/8520?print=1&bulkprinting=1&filename=/private/var/tmp/phpHRXEw8.moved&indexInList=30&nopeergroup=1&nolabpage=0&hideScreeningOnly=1&showOnlyScreening=0&hideHoldMailing=1的网页导致了太多的重定向。清除此站点的cookie或允许第三方cookie可以解决问题。如果没有,则可能是服务器配置问题,而不是计算机问题。

我尝试清理cookie但仍然遇到同样的错误。

我在这里附上了一些代码,希望有人可以帮助我:

  $sessionData['first_name'] = $foundUser->first_name;
  $sessionData['last_name']  = $foundUser->last_name;

  // Overwrite $_REQUEST variable with parameters before including
  // the hpa report
  $_REQUEST = array(
    'user_id'      => $foundUser->id,
    'bulkprinting' => true
  );
  if($nopeergroup) { $_REQUEST['nopeergroup'] = $nopeergroup; }
  if($nolabpage) { $_REQUEST['nolabpage'] = $nolabpage; }
  if($hideScreeningOnly) { $_REQUEST['hideScreeningOnly'] = $hideScreeningOnly; }
  if($showOnlyScreening) { $_REQUEST['showOnlyScreening'] = $showOnlyScreening; }
  if($hideHoldMailing) { $_REQUEST['hideHoldMailing'] = $hideHoldMailing; }

  $includeValue = include __DIR__.'/../hpa/hpa.php';

  $url = sprintf(
    "/content/8520?print=1&bulkprinting=1&filename=%s&indexInList=%s" .
    "&nopeergroup=%s&nolabpage=%s&hideScreeningOnly=%s" .
    "&showOnlyScreening=%s&hideHoldMailing=%s",
    $filename, $indexInList, (int)$nopeergroup, (int)$nolabpage,
    (int)$hideScreeningOnly, (int)$showOnlyScreening, (int)$hideHoldMailing);

  if($hradata[0] !== false) {
    $sessionData['hra_id'] = $hradata[0]['id'];
  }
  if($screeningdata[0] !== false) {
    $sessionData['screening_id'] = $screeningdata[0]['id'];
  }

  if($includeValue !== 1) {
    // Redirect to URL
    $sessionData['message']     = $messages_set[$includeValue];
    $_SESSION['printing_set'][] = $sessionData;

    redirect($url);
  }

  $sessionData['markAsMailed'] = true;
  $_SESSION['printing_set'][]  = $sessionData;
?>
<script type="text/javascript">
  function waitPrint() {
    window.print();
    var t = setTimeout("timed()", 1000);
  }
  function timed() {
    window.location.replace("<?php echo $url ?>");
  }

  if(window.attachEvent) {
    window.attachEvent("onload", waitPrint);
  } else if(window.addEventListener) {
    window.addEventListener("load", waitPrint, false);
  }
</script>

3 个答案:

答案 0 :(得分:0)

听起来你有很多需要打印的文件!

您可以更改浏览器设置(我似乎记得您可以在Firefox中)以允许超过30个循环。

或者,您可以随时将代码限制为30个循环,然后等待进一步的用户交互继续进行下一个30循环。

第三个选项是始终在每个页面上创建一个包含一个报告的Word文档或PDF,然后保存文件并打印 - 稍微麻烦(在某种程度上)但至少你可以打印所有内容马上。

答案 1 :(得分:0)

为了将$includeValue设置为任何内容,文件__DIR__.'/../hpa/hpa.php'必须在其中包含return语句,如include include中所示,示例5.如果包含的文件返回值,则1仅在调用时返回值。

如果您的脚本仍然产生无限循环,则所包含文件中的逻辑不正确,并且始终产生的值不是$includeValue = include __DIR__.'/../hpa/hpa.php'; if($includeValue !== 1) { // Redirect }

基本上,这是您的问题归结为的代码:

{{1}}

答案 2 :(得分:0)

当站点配置错误配置到重定向循环时,浏览器内置检查以帮助您,并且30必须是您正在使用的浏览器的限制。你故意构建了一个重定向循环,但浏览器并不知道。不是使用window.location.replace()方法,而是自动提交的表单怎么样?这应该与浏览器不同,并允许循环按设计进行。

<script type="text/javascript">
  function waitPrint() {
    window.print();
    var t = setTimeout("timed()", 1000);
  }
  function timed() {
    window.reloadForm.submit();
  }
  if(window.attachEvent) {
    window.attachEvent("onload", waitPrint);
  } else if(window.addEventListener) {
    window.addEventListener("load", waitPrint, false);
  }
</script>

<form name="reloadForm" action="<?php echo $url ?>">
</form>