Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-fopentocurl_Php_Curl_Fopen - Fatal编程技术网

PHP-fopentocurl

PHP-fopentocurl,php,curl,fopen,Php,Curl,Fopen,我正在修改我使用的基于web的系统的代码,因为在我的开发环境中,我激活了fopen()函数,但在生产环境中,出于安全原因,我没有激活该函数。 在代码中,我有以下功能: function PostRequest($url, $data, $optional_headers = null) { $params = array( 'http' => array( 'method' => 'POST', 'content

我正在修改我使用的基于web的系统的代码,因为在我的开发环境中,我激活了fopen()函数,但在生产环境中,出于安全原因,我没有激活该函数。 在代码中,我有以下功能:
function PostRequest($url, $data, $optional_headers = null)
{
    $params = array(
        'http' => array(
            'method' => 'POST',
            'content' => $data
        )
    );
    if ($optional_headers !== null)
    {
        $params['http']['header'] = $optional_headers;
    }

    $ctx = stream_context_create($params);
    $fp = @fopen($url, 'rb', false, $ctx);
    if (!$fp)
    {
        die("Problem reading data from " . $url . "");
    }

    $response = @stream_get_contents($fp);

    // var_dump($response);

    if ($response == false)
    {
        die("Problem reading data from " . $url . "");
    }

    return $response;
}
我将其更改为:

function PostRequest($url, $data, $optional_headers = null)
{
    $params = array(
        'http' => array(
            'method' => 'POST',
            'content' => $data
        )
    );
    if ($optional_headers !== null)
    {
        $params['http']['header'] = $optional_headers;
    }

    // Customizations for fopen() or curl()

    if (ini_get('allow_url_fopen') == true)
    {
        $params = array(
            'http' => array(
                'method' => 'POST',
                'content' => $data
            )
        );
        if ($optional_headers !== null)
        {
            $params['http']['header'] = $optional_headers;
        }

        $ctx = stream_context_create($params);
        $fp = @fopen($url, 'rb', false, $ctx);
        if (!$fp)
        {
            die("Problem reading data from " . $url . "");
        }

        $response = @stream_get_contents($fp);

        // var_dump($response);

        if ($response == false)
        {
            die("Problem reading data from " . $url . "");
        }

        return $response;
    }
    else
    if (function_exists('curl_init'))
    {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $params);
        $response = curl_exec($curl);
        curl_close($curl);
        return $response;
    }
    else
    {
        die("Problem reading data from " . $url . "");
    }
}
这里的问题是这个错误:

注意:中的数组到字符串转换 /第133行的path/classes/xmwsclient.class.php API错误:无“请求” 方法:采用免疫组化方法

从我的搜索结果来看,问题在于:

curl_setopt($curl,CURLOPT_HTTPHEADER,$params)

但我不知道如何修改这段代码,因为数组$params会尽快创建:

<?php

$params = array(
    'http' => array(
        'method' => 'POST',
        'content' => $data
    )
);

if ($optional_headers !== null)
{
    $params['http']['header'] = $optional_headers;
}

CURLOPT_HTTPHEADER
不接受
数组[]
,这就是您在此处传递的内容

$params = array(
    'http' => array(
        'method' => 'POST',
        'content' => $data
    )
);
而且,这不是正确的使用方法。这将是您的
$optional_headers
,必要时转换为
字符串[]
。要设置这些参数,可以使用
CURLOPT\u POST
CURLOPT\u POSTFIELDS

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$data
必须是包含原始数据的
字符串[]
,或者是包含url编码数据的
字符串。传递数组将设置
内容类型:多部分/表单数据
,而字符串将设置
内容类型:application/x-www-form-urlencoded


有关详细信息,请参阅。

您的代码在当前状态下无法读取。请添加正确的换行符和缩进。正确识别代码请@rafael通过修复格式,请使用格式发布代码我尝试过,但当我发送到post时,系统返回代码错误:史坦克斯·斯克瑞格!我将在打开下一个主题或插入下一个代码时尝试此操作!:)@拉斐尔:如果我的答案是有用的,请考虑将它标记为接受,并在投票按钮下的复选标记。