【问题标题】:how to require a php file passing parameters如何要求一个php文件传递参数
【发布时间】:2022-01-05 09:10:28
【问题描述】:

我有一个做某事的函数(它包含在我的文件 php 中)。 该函数应该需要一个传递参数的 php 文件,但它失败了,我无法继续......

按照函数的初始代码:

<?php
    function write_pdf($orientation, $initrow, $rowsperpage)
    {
        ob_start();

        require "./mypage.php?orient=$orientation&init=$initrow&nrrows=$rowsperpage"; 

        $html = ob_get_clean();

        $dompdf = new Dompdf();
        
        $dompdf->loadHtml($html);

...
...

“mypage.php”返回错误:

注意:未定义的变量:方向在 C:\wamp\www\htdocs\site\mypage.php 第 8 行

注意:未定义变量:initrow in C:\wamp\www\htdocs\site\mypage.php 第 8 行

注意:未定义变量:rowsperpage in C:\wamp\www\htdocs\site\mypage.php 第 8 行

有没有办法做这样的事情? 谢谢!

【问题讨论】:

  • 可以function write_pdf($orientation = 'landscape', $initrow = 0, $rowsperpage = 10)
  • 但我需要 mypage.php 中的这些值。我会用值“调用” mypage.php(因为我有一个多次调用 write_pdf 的循环而改变),我会得到该页面的 html
  • 你正在调用write_pdf(),它调用了文件,不是吗?
  • mypage.php(或minimal reproducible example)长什么样子?

标签: php function parameters require


【解决方案1】:

您不需要传递参数,因为当您需要文件时,就像它在函数内部的代码一样,因此在 require 之前在函数中定义的任何变量都将存在并在您的 required 中定义文件。因此,您可以在所需文件中直接使用变量 $orientation、$initrow、$rowsperpage。

另一种非常丑陋的方法是在需要文件之前将这些变量添加到 $_GET,假设您希望从 $_GET 中获取它们:

$_GET['orient'] = $orientation;
$_GET['init'] = $initrow;
$_GET['nrrows'] = $rowsperpage;

require './mypage.php';

我推荐的方法是将你包含的文件代码封装在一个函数中,这样你就可以调用它传递参数。甚至创建一个类,如果包含的代码很大并且可以在方法中切片。

【讨论】:

    【解决方案2】:

    你可以这样做。

    to_include.php

    <?php
    $orient = isset($_GET["orient"]) ? $_GET["orient"] : "portrait";
    $init = isset($_GET["init"]) ? $_GET["init"] : 1;
    
    echo "<pre>";
    var_dump(
    [
        "orient"=>$orient,
        "init"=>$init
    ]
    );
    echo "</pre>";
    

    main.php

    <?php
    function include_get_params($file) {
      $main = explode('?', $file);
      $parts = explode('&', $main[1]);
      foreach($parts as $part) {
        parse_str($part, $output);
        foreach ($output as $key => $value) {
          $_GET[$key] = $value;
        }
      }
      include($main[0]);
    }
    
    include_get_params("to_include.php?orient=landscape&init=100");
    

    方法include_get_params,首先将字符串的主要部分分开,将文件与参数分开,通过? 之后,他将参数设置为碎片并将所有这些都放入 $_GET 在 to_include 中,我们从 $_GET 中检索参数

    希望对你有所帮助。

    【讨论】:

    • 谢谢你们!很好的建议,我决定应用丑陋的版本,它很快就奏效了!多亏了!
    猜你喜欢
    • 2012-02-08
    • 2018-12-09
    • 2011-12-27
    • 2013-11-21
    • 2019-09-08
    • 2021-04-24
    • 2022-12-05
    • 2014-03-10
    • 2017-01-23
    相关资源
    最近更新 更多