在自身上使用php发送POST请求

在自身上使用php发送POST请求,php,post,Php,Post,我有一个稍微遵循MVC模型的应用程序。它有3个主页(其中一些对问题不重要): 在OOP中构建的PHP框架(实现用户、文件流、邮件pear模块等) 一个流程页面,用于实例化应用程序所需的对象。页面名为call Process.php 显示Process.php使用的所有信息的HTML页面 问题是: php创建一个POST请求(参见下面的代码),该请求使用静态URL向自身发送请求。我想知道是否有办法将其更改为相对URL Process.php的代码: $username = htmlspecialc

我有一个稍微遵循MVC模型的应用程序。它有3个主页(其中一些对问题不重要):

  • 在OOP中构建的PHP框架(实现用户、文件流、邮件pear模块等)
  • 一个流程页面,用于实例化应用程序所需的对象。页面名为call Process.php
  • 显示Process.php使用的所有信息的HTML页面
  • 问题是:

    php创建一个POST请求(参见下面的代码),该请求使用静态URL向自身发送请求。我想知道是否有办法将其更改为相对URL

    Process.php的代码:

    $username = htmlspecialchars($_POST['txtFCUCompName'], ENT_QUOTES);
    $password = htmlspecialchars($_POST['pwdFCUPwd'], ENT_QUOTES);
    $confirmation = htmlspecialchars($_POST['pwdFCUConf'], ENT_QUOTES);
    $email = htmlspecialchars($_POST['txtFCUEml'], ENT_QUOTES);
    $_SESSION['msg'] = "";
    
    /*Sending a POST request trought PHP to use this page to validate the fields in php in case the clients javascript module is disabled.*/
    //!!!!!!!!!This line is the problem!!!!!!!!!
    $url = "http://someadresse.com/somefolder/Process.php";
    
    $PostParams = array
    (
        'NewUser' => array
        (
            'validate'=>'NewUser',
            'array'=>json_encode
            (
                array
                (
                    "txtFCUCompName"=>$username,
                    "txtFCUEml"=>$email,
                    "pwdFCUPwd"=>$password,
                    "pwdFCUConf"=>$confirmation
                )
            )
        )
        //More arrays.
    );
    //Loop through all the arrays inside the array of parameter and send a request for each one.    
    foreach($PostParams as $index=>$Params)
    {
        $PostOptions = array
        (
            "http"=>array
            (
                "header"=>"Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
                "method"=>"POST",
                "content"=>http_build_query($Params)
            )
        );
    
        $context = stream_context_create($PostOptions);
        $_SESSION['msg'] = file_get_contents($url, false, $context);//LINE 1502 (see error code below)
    }
    
    if($_SESSION['msg'] == null)
    {
        //Do stuff with the returned values of the post request...    
    }
    header("Location: SoumissionJRT.php");
    //I have another section of Process.php that do some validation and echo HTML div tags with text.
    
    更多信息:

    问题是Process.php可能会不时更改文件夹(可能每年一次),我不想每次都更改硬编码的
    $url
    变量。请求总是指向它发起的同一页

    不要误解这个问题,问题不在于POST请求本身,而在于它发送到的URL。邮局工作得很好

    我尝试过将其更改为
    $url=“../Process.php”
    $url=“.”“
    ,但我对
    $url
    所做的任何更改似乎都不起作用。它不会在浏览器上显示错误消息,但在PHP errorlogs文件中,我有以下错误

    [09-Apr-2014 16:15:33]PHP警告:文件获取内容(.):无法 打开流:中的权限被拒绝 第1502行的C:\inetpub\wwwroot\somefolder\Process.php

    [09-Apr-2014 16:16:10]PHP警告: 文件\u获取\u内容(../Process.php):无法打开流:没有这样的文件 或第1502行C:\inetpub\wwwroot\somefolder\Process.php中的目录

    第1502行指向

    $_SESSION[$key] = file_get_contents($url, false, $context);
    
    此外,我并不笨,我知道
    file\u get\u contents()
    找不到请求的URL,或者这个URL不存在于我的应用程序目录中

    编辑: $\u服务器['REQUEST\u URI']不工作,它返回以下值:

    /somefolder/Process.php
    
    请求似乎需要一个完整的URL来Process.php。 但是可能还有另一个包含所需地址的
    $\u服务器[]

    或者,我可能需要连接其中的2或3个

    有人知道一种变通方法或修正方法吗


    谢谢大家!

    在PHP中,您只需使用

    $url = $_SERVER['REQUEST_URI'];
    

    这将始终为您获取当前正在运行的脚本的位置。

    不起作用。。。检查已编辑的问题以进行解释。它仍然给我一个无法打开流的错误,如问题中所示,目录中没有这样的文件。@Sebastien你显然是糊涂了。为什么要尝试从同一个PHP文件中读取PHP文件的内容?你需要重新思考你的逻辑。我认为逻辑不是问题所在。但抛开这一点不谈,在不知道代码生成的上下文的情况下质疑代码背后的逻辑并不能帮助我找到答案。我用这行代码解决了我的问题:
    $url=“http://”。$\u SERVER['SERVER\u NAME'.$\u SERVER['REQUEST\u URI']当您提供实现我所需的基本知识时,我会给您答案。