用php发送POST请求

时间:2014-04-09 20:55:28

标签: php post

我有一个轻松遵循MVC模型的应用程序。它有3个主页(有些对于这个问题并不重要):

  1. 在OOP中构建的PHP Framework(实现用户,文件流,邮件梨模块等)
  2. 实例化应用程序所需对象的进程页面。该页面调用Process.php
  3. 一个HTML页面,显示Process.php使用的所有信息。
  4. 问题:

    Process.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。 POST工作正常。

    我已尝试将其更改为$url = "../Process.php"$url = ".",但我改变$url似乎没有任何效果。它不会在浏览器上显示错误消息,但在PHP errorlogs文件中我有以下错误

      

    [09-Apr-2014 16:15:33] PHP警告:file_get_contents(。):未能   开放流:权限被拒绝   第1502行的C:\ inetpub \ wwwroot \ somefolder \ Process.php

      

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

    LINE 1502指向

    $_SESSION[$key] = file_get_contents($url, false, $context);
    

    此外,我并不愚蠢我明白file_get_contents()找不到请求的URL或者我的应用程序目录中不存在此URL。

    编辑: $ _SERVER ['REQUEST_URI']不起作用,它返回此值:

    /somefolder/Process.php
    

    似乎请求需要一个完整的URL到Process.php。 但也许还有另一个$_SERVER[]包含所需的地址?

    或者,也许我需要连接其中的2个或3个?

    任何人都知道工作或修理?

    谢谢!

1 个答案:

答案 0 :(得分:3)

在PHP中,您可以使用

$url = $_SERVER['REQUEST_URI'];

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