0

我有一个 php 脚本,它计算的东西非常长。

它是从 js 文件中调用的,除了从 js 文件中调用它之外,我还想从另一个 php 文件中调用它。

该文件称为 strategy.server.php,它是这样构建的

 <?php
    include_once("../config.php");
    include_once("../class/simulator.class.php");

    $simulator = new Simulator();
    $SPOT = $_GET["strikePrice"];
    $INTEREST = $_GET["interestRate"] / 100;
    $VOLATILITY = $_GET["volatility"] / 100;
    $REMAININGDAYS = $_GET["remainingDays"] / 365;

    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header("Content-type: application/json; charset=utf-8");

    if(!empty($_GET['mycase']))
    {
        switch($_GET['mycase'])
////calculations... 
            $data['totalMargin'];  
           echo json_encode($data);

我正在尝试使用相同的文件来计算不同的参数(在循环中)。
所以我考虑使用一个包含并像这样发布参数:

$params         = "some params...";
$params     .=  "strikePrice=".$data["strikePrice"].
        "&volatility=".$data["volatility"].
        "&remainingDays=".$data["remainingDays"].
        "&interestRate=".$data["interestRate"].
        "&commission="."7".//$data["commission"].
        "&profitDays="."7";//$data["profitDays"];

include("server/strategy.server.php?" .$params);
json_decode($data);
echo $data['totalMargin'];

但它给出了一个错误:
Warning: include(server/strategy.server.php?mycase=1&rangeMin=0&rangeMax=0&strikePrice=1078&volatility=24&remainingDays=51&interestRate=2.5&commission=7&profitDays=7) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\s-maof-vb\PRO\functions_alarms.php on line 86

如果我包含带有参数的文件,它会加载(但没有参数..)

4

2 回答 2

0

include 函数不像 HTTP 那样接受参数。此外,您尝试做的不是最佳实践,因为它多次包含同一个文件。您必须创建一个遍历 $data 值数组的 for 或 while 循环。

如果您仍然需要此功能,我建议使用cURL 库file_get_contents()来调用脚本(而不是包含)。

于 2012-07-10T09:08:21.163 回答
0

包含 PHP 文件会将文件中的所有操作插入到当前正在执行的 PHP 文件中,因此范围内定义的任何参数都可以从代码中访问。

例如,如果我有一个echo.php包含以下内容的文件:

<?php
echo $test."\n";

并将其包含在另一个文件中:

<?php
$test= "hello";
include("echo.php");
$test = "world";
include("echo.php");

结果将是:

hello
world

因此,包含文件的参数不是使用 HTTP GET 方法传递的,而是通过范围内定义的方法传递的。此外,在 unix 中获取文件名末尾的参数将导致文件系统在磁盘上查找整个字符串。

对于上面的示例,该文件将编译为:

<?php
$test= "hello";
echo $test."\n";
$test = "world";
echo $test."\n";

因此,在您的情况下,您可能需要编辑strategy.server.php脚本以首先检查数据是否在 params 数组中传递,然后默认为 GET:

if(empty($params)){
   $params = $_GET; 
}
// filter params for user input;
于 2012-07-10T09:05:13.260 回答