我们最近移动了服务器,并注意到了一些奇怪的问题。我们注意到的主要问题是,在 php 中执行空检查的任何变量都被解释为字符串。
例如
if($var == null){
//do something
}
所做的两个关键更改是:1. 从 HTTP 服务器更改为 HTTPS2. 从 php 版本 5.3.14 更改为 5.3.13
这些请求是使用 jQuery.ajax post call 发出的。
我的问题是,是否有任何已知的问题/原因导致这种情况发生(例如上面的更改),以及是否可以采取任何措施来解决问题(只需最少的更改)。
一如既往,感谢您的回复!
编辑:例
Js/jQuery
var test = null;
$.ajax({
url: 'functions.php',
data: { action: 'testNullFunction', testVar:test },
type: 'post',
success:
function (output) {
alert(output)
}})
菲律宾语:
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch ($action) {
case 'testNullFunction':
if ($_POST['testVar']==null || is_null($_POST['testVar'])){
echo "its null";
}
break;
当你这样做时:
$.ajax({
url: 'functions.php',
data: { action: 'testNullFunction', testVar:test },
type: 'post',
success: function (output) {
alert(output)
}
})
将data
作为字符串发送,因此所有值也都成为字符串。
当 PHP 收到它时,它仍然是一个字符串。在这种情况下,PHP 无法确定testVar
是包含null
还是"null"
- 类型信息丢失了。
您可以通过发送以下内容来解决此问题:
data: { action: 'testNullFunction', testVar: JSON.stringify(test) }
并接收:
$testVar = json_decode($_POST['testVar'])
有点幼稚的答案,但请尝试进行严格的类型检查。
if($var === null){
//do something
}
或者也许改用is_null。
if (is_null($var)){
//do something
}
如果您
没有按照 JSON 行对数据进行编码,您的字段将作为字符串发送 - 这包括作为'null'
发送的null
,当然,如果您根据类似 if($myVar==null)
的内容进行评估并且$myVar
包含'null'
它不是真正的 null。
您可能还想看看这个问题。