我正在将一个站点从Windows服务器移动到运行PHP 5.2.15的Linux服务器。
网站上有一个大型的申请表,使用javascript,jquery和ajax来验证/添加字段,json用于编码/解码输入数据,PHP用于发送电子邮件。
此表单在Windows帐户上正常运行。当我将它移动到我们的Linux服务器时,一切正常,除了发送的电子邮件是空的。有一个PHP错误被打印并与电子邮件一起发送: 警告:在第4行的/home/account/public_html/application/application_email.tpl中为foreach()提供的参数无效
该文件的前几行如下:
<?php
$infoArr = get_object_vars( $info );
foreach( $infoArr as $key=>$val ) {
$parts = explode( "_", $key );
$number = array_pop( $parts );
if( count( $parts ) >= 1 && is_numeric( $number ) )
{
所以对我来说,错误说$ info是空的。 php变量$ info在另一个名为submitApp.php的文件中创建。该文件的前几行是:
<?php
require_once( "emogrifier.php" );
$info = json_decode( $_REQUEST['data'] );
ob_start();
require( "application_email.tpl" );
$css = file_get_contents("application_email.css");
$html = ob_get_contents();
ob_end_clean();
因此,json_decode函数没有发生什么。在Firefox中使用Live HTTP标头,我可以看到表单输入数据(通过POST)传递给submitApp.php。所以,我知道数据正在到达那里。以下是来自LiveHTTPheaders的行:
POST /~account/application/submitApp.php data=%7B%22name%22%3A%22Test+Name%22%2C%22address%22%3A%22111+Test+Street%22%2C%22city%22%3A%22Testville%22%2C%22state%22%3A%22NJ%22%2C%22zip%22%3A%2212121%22%2C%22email%22%3A%22test%40test.com%22%2C%22
等等。
因此看起来好像json_decode不起作用,因此不会将$_REQUEST['data']
的内容放入变量$info
。
有什么想法吗?我不是php的新手,但我是json,ajax以及这个“emogrifier”的新手。
谢谢!
答案 0 :(得分:1)
我有同样的问题。我的JSON在本地服务器工作正常,这是我转换到Linux的窗口服务器我遇到了同样的问题,我尝试发布menthod获取数据后工作正常。我已将json_decode($_REQUEST['json']
替换为json_decode($_POST['json']
。最后发现它正在运行。
答案 1 :(得分:0)
好的,所以如果您认为$ info为空,那么您应该测试该条件,以便您可以优雅地处理它。以下可能看起来很简单,但我想首先消除最简单的解决方案,以确保我们正在以艰难的方式做事。因此,我喜欢在使用之前检查我的变量,因为我厌倦了NULL引用错误。
if( isset($info) )
{
//... do something
}
else
{
//... gracefully handle the error
}
至于怀疑json代码不起作用,你应该首先测试$ _REQUEST ['DATA']变量:
if( isset($_REQUEST['data]) )
{
// DEBUG -- attempt to view the data:
print_r($_REQUEST['data']);
// ... perform json extraction
}
else
{
// ... handle the error gracefully
}
通常当您使用HTML表单元素时,数据通过POST请求发送。我知道GET / POST请求也最终出现在REQUEST超全局数组中,但您可能想验证您的数据不在POST数组中......
告诉我们你的结果:)