无法通过php文件\u get\u内容传递某些数据

无法通过php文件\u get\u内容传递某些数据,php,Php,这是一个附带条件——我发现了更多的信息,因此这个问题本身需要改变 我正试图将数据从javascript SPA传递到一个php文件(dbPatch.php)和另一个php文件(mongoPatch_backend.php)dbPatch.php有效地充当了将数据传输到适当服务器的中间人 我的javascript获取如下所示: const API = PHP_FILE_LOCATION + 'dbPatch.php/'; const query = "needleKey=" + enco

这是一个附带条件——我发现了更多的信息,因此这个问题本身需要改变

我正试图将数据从javascript SPA传递到一个php文件(
dbPatch.php
)和另一个php文件(
mongoPatch_backend.php
dbPatch.php
有效地充当了将数据传输到适当服务器的中间人

我的javascript获取如下所示:

const API = PHP_FILE_LOCATION + 'dbPatch.php/';
const query = 
    "needleKey=" + encodeURIComponent(needleKey) + "&" +
    "needle=" + encodeURIComponent(needle) + "&" +
    "newData=" + encodeURIComponent(JSON.stringify(newData));

let URI = API;

fetch(URI, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: query
    }).then.... blah...blah....
这将调用我的php文件dbPatch

<?php
$API = "https://SERVER/php/mongoPatch_backend.php?";

$needleKey = $_REQUEST['needleKey'];
$needle = $_REQUEST['needle'];
$newData = $_REQUEST['newData'];

$postData = "needleKey=".urlencode($needleKey);
$postData .= "&needle=".urlencode($needle);
$postData .= "&newData=".urlencode($newData); //THIS IS THE LINE I TALK ABOUT BELOW

$data = file_get_contents($API.$postData);

echo $data;
?>
这是行不通的

如果我直接从javascript调用mongoPatch_backend.php,它确实可以工作。 这使我相信问题在于dbPatch.php文件中的数据的传递

此外,如果我使用不同的“newData”(更短)调用dbPatch,它确实可以工作。这让我相信这是一种数据传递的方式(但请记住,如果我直接调用它,它是有效的……所以它是从javascript中产生的)

通过
var_dump($_请求['newData'])从dbPatch.php吐出$newData
为我提供了JSON数据,该数据已经字符串化,但不是字符转义的。大约5000个字符

这里是有趣的部分

如果我将mongoPatch_backend.php更改为JUST
,我仍然无法通过dbPatch.php将任何信息传递回SPA。这确实让我觉得dbPatch.php文件有问题

所以。。。我注释掉
$postData.=”&newData=“.urlencode($newData)dbPatch.php中的行。。。我确实得到了“你好世界”的回复

如果我只是删除.urlencode,而只是使用
$postData.=“&newData=”.$newData
因此,问题似乎在于在我的帖子中添加$newData。mongoPatch_backend.php甚至没有对$newData执行任何操作。。。php(看起来)只是在发送数据时遇到了问题

不幸的是。。。我不知道该从这里走到哪里…考虑到,我确实需要将$newData发送到后端

编辑:在回应我使用“POST”而不是“GET”的建议时,我进行了搜索,发现了以下堆栈问题:

基于此,我现在有了:

dbPatch.php:

$url = 'https://SERVERNAME/php/mongoPatch_backend.php';

$myvars = 'myvar1=' . "TEST" . '&myvar2=' . "ALSOTEST";

$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec( $ch );

echo $response;
我将我的
mongoPatch_backend.php
更改为:

<?php
echo "HELLO WORLD";
?>

file\u get\u contents
仅用于将文件读入字符串。可以将其想象为在记事本或文本编辑中打开文本文档

对于动态呈现PHP文件的API请求,您需要使用PHP库“curl”


我不完全确定原因,但这个问题:让我找到了一个使用cURL的例子,这个例子很有效

我的dbPatch.php现在看起来像这样,似乎可以工作

<?php
$url = 'https://SERVERNAME/php/mongoPatch_backend.php';

$params = 'needleKey=' . $_REQUEST['needleKey'] . '&needle=' . $_REQUEST['needle'] . '&newData='. $_REQUEST['newData'];

if (! function_exists ( 'curl_version' )) {
    exit ( "Enable cURL in PHP" );
}

$ch = curl_init ();
$timeout = 0; // 100; // set to zero for no timeout
$myHITurl = "http://152.61.248.218/php/mongoPatch_backend.php";
curl_setopt ( $ch, CURLOPT_URL, $myHITurl );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $params);
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
$file_contents = curl_exec ( $ch );
if (curl_errno ( $ch )) {
    echo curl_error ( $ch );
    curl_close ( $ch );
    exit ();
}
curl_close ( $ch );

echo "$file_contents";
?>


尝试使用POST而不是GET。大多数web服务器都限制URL中允许的字符数。我添加了更改为“POST”的尝试……您可以使用file\u GET\u内容获取远程资源。我将尝试使用curl添加到OP中。值得一提的是,我也使用了您第二个链接中的示例,但运气不佳。
cURL support    enabled
cURL Information    7.59.0
Age 4
Features
AsynchDNS   Yes
CharConv    No
Debug   No
GSS-Negotiate   No
IDN Yes
IPv6    Yes
krb4    No
Largefile   Yes
libz    Yes
NTLM    Yes
NTLMWB  No
SPNEGO  Yes
SSL Yes
SSPI    Yes
TLS-SRP No
HTTP2   Yes
GSSAPI  No
KERBEROS5   Yes
UNIX_SOCKETS    No
PSL No
Protocols   dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
Host    x86_64-pc-win32
SSL Version OpenSSL/1.1.0h
ZLib Version    1.2.11
libSSH Version  libssh2/1.8.0
<?php
$url = 'https://SERVERNAME/php/mongoPatch_backend.php';

$params = 'needleKey=' . $_REQUEST['needleKey'] . '&needle=' . $_REQUEST['needle'] . '&newData='. $_REQUEST['newData'];

if (! function_exists ( 'curl_version' )) {
    exit ( "Enable cURL in PHP" );
}

$ch = curl_init ();
$timeout = 0; // 100; // set to zero for no timeout
$myHITurl = "http://152.61.248.218/php/mongoPatch_backend.php";
curl_setopt ( $ch, CURLOPT_URL, $myHITurl );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $params);
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
$file_contents = curl_exec ( $ch );
if (curl_errno ( $ch )) {
    echo curl_error ( $ch );
    curl_close ( $ch );
    exit ();
}
curl_close ( $ch );

echo "$file_contents";
?>