为什么在更改PHP回显位置时会出现404错误

时间:2015-08-21 02:18:36

标签: php http-post http-status-code-404

<?php

define('PATH', dirname(dirname(__FILE__)).'/');
require_once (PATH.'./wp-blog-header.php');
global $wpdb;




// if(!isset($_POST['username'])){
//  //echo $_POST['submit'];
//  exit('非法访问!');

// }

$username   = $_POST["username"];
$password   = $_POST["password"];
$email      = $_POST["email"];
$checkcode  = $_POST["checkcode"];



$query_pwd_str = "SELECT password FROM yjhy_users_custom WHERE username=%s";


if($wpdb == null)
    echo "wpdb is null";

$pwd_query_result = $wpdb->get_results($wpdb->prepare($query_pwd_str, $username));





$pwd_query_result_count = count($pwd_query_result);

if($pwd_query_result_count == 1){

    //已经存在该用户名,返回数据
     // error here
     header('Content-type:text/json');
     $json_ouput = '{"status":"success","errormsg":"'.$username.'"}';
     echo $json_ouput;


}


?>

使用上面的代码,我使用方法post来引用php文件,它总是以404错误响应。

但是,当我将PHP代码修改为BELOW时:

<?php
  //****************** move the function header() here
  header('Content-type:text/json');
  //******************  echo "{" here
  echo "{";

?>
<?php

define('PATH', dirname(dirname(__FILE__)).'/');
require_once (PATH.'./wp-blog-header.php');
global $wpdb;




// if(!isset($_POST['username'])){
//  //echo $_POST['submit'];
//  exit('非法访问!');

// }

$username   = $_POST["username"];
$password   = $_POST["password"];
$email      = $_POST["email"];
$checkcode  = $_POST["checkcode"];



$query_pwd_str = "SELECT password FROM yjhy_users_custom WHERE username=%s";


if($wpdb == null)
    echo "wpdb is null";

$pwd_query_result = $wpdb->get_results($wpdb->prepare($query_pwd_str, $username));





$pwd_query_result_count = count($pwd_query_result);

if($pwd_query_result_count == 1){

    //已经存在该用户名,返回数据
     // error here

     $json_ouput = '"status":"success","errormsg":"'.$username.'"';
     echo $json_ouput;


}


?>

<?php
  //******************  echo "}" here
  echo "}";

?>

然后,它起作用,服务器响应状态为200!

我对这个问题感到困惑,整天都在搜索,找不到答案!

为什么代码会像这样工作?

1 个答案:

答案 0 :(得分:1)

用1天时间&#39;时间,我发现了! 我直接请求带有文件路径http://localhost:7770/api/register.php的链接,而不是通过在仪表板中创建page来请求链接,因此该链接不在WP的数据库中。 在wp();中执行require_once (PATH.'./wp-blog-header.php');时,WP框架需要初始化自己,但是当初始操作在文件/wp-includes/class-wp.php中执行时,代码如下:

public function main($query_args = '') {
        $this->init();
        **$this->parse_request($query_args);**
        $this->send_headers();
        $this->query_posts();
        $this->handle_404();
        $this->register_globals();
        do_action_ref_array( 'wp', array( &$this ) );
    }

 }

语句$this->query_posts();需要检查链接$this->parse_request();。功能parse_request()

public function parse_request($extra_query_vars = '') {
        global $wp_rewrite;

        /**
         * Filter whether to parse the request.
         *
         * @since 3.5.0
         *
         * @param bool         $bool             Whether or not to parse the request. Default true.
         * @param WP           $this             Current WordPress environment instance.
         * @param array|string $extra_query_vars Extra passed query variables.
         */
        if ( ! apply_filters( 'do_parse_request', true, $this, $extra_query_vars ) )
            return;

        $this->query_vars = array();
        $post_type_query_vars = array();

        if ( is_array( $extra_query_vars ) ) {
            $this->extra_query_vars = & $extra_query_vars;
        } elseif ( ! empty( $extra_query_vars ) ) {
            parse_str( $extra_query_vars, $this->extra_query_vars );
        }
        // Process PATH_INFO, REQUEST_URI, and 404 for permalinks.

        // Fetch the rewrite rules.
        $rewrite = $wp_rewrite->wp_rewrite_rules();

        if ( ! empty($rewrite) ) {
            // If we match a rewrite rule, this will be cleared.

            ***$error = '404';***
            $this->did_permalink = true;

            $pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';
            list( $pathinfo ) = explode( '?', $pathinfo );
            $pathinfo = str_replace( "%", "%25", $pathinfo );

            list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
            $self = $_SERVER['PHP_SELF'];
            $home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' );

并且该链接不在数据库中,因此WP在下面设置错误404:

然后我在error 404中获得了***$error = '404';***

解决方案:

  1. 在信息中心中创建page
  2. 修改您想要的page网址。
  3. 将您的代码放入page template
  4. this template
  5. 中使用page
  6. 和Ok