Power

2502 经验值

是把每一行的拼接结果字符串打印出来看? 我没怎么明白!

都试过了,csrf也关掉了,就是不行 我都试过了 百度过了 没办法了 才来问的!
因为他是在方法里面再次触发http请求的,也没有给我什么报错信息,日志也没有!
所以我一脸懵逼,我也不知道要怎么调试这个拼接的http请求是否可行

当我执行

Route::get('/forsockopen', "TestController@ForFsockopen");

这个路由的时候,进入方法中,执行我拼接的http请求,这个时候拼接的是一个post请求,但是请求一直发送不成功,但是当我拼接的http换成get请求时候(注释掉的那段) 这个请求就可以执行成功,执行

// Route::get('/testfsock', "TestController@TestFsock");

里面的操作

  • 业务:访问一个url,触发一个方法,这个方法中自己拼接了一个http请求,利用php的fsockopen函数、以及fwrite函数,再次发起一个get或者post请求,实现php的多线程(这个应该是多线程吧)

  • 问题:用这样的方式,拼接get请求可以成功访问,但是拼接post请求一直不能成功(我再次触发的方法中是忘一个文件中写入东西,get可以成功写入,post不行).

  • 访问的代码如下

public function ForFsockopen () {
        $host = '127.0.0.1:8000';  
        $port = 80;  
        $errno = '';  
        $errstr = '';  
        $timeout = 30;  
        $url = '/testfsock';  
          
        $param = array(  
            'name' => 'fdipzone',  
            'gender' => 'man'  
        );  

        $data = http_build_query($param);  
          
        // create connect  
        $fp = fsockopen($host, $port, $errno, $errstr, $timeout); 

        if (!$fp) {
            echo "$errstr ($errno)<br />\n";
        } else {
            // $out = "GET $url HTTP/1.1\r\n";  
            // $out .= "Host: $host\r\n";  
            // $out .= "Connection:close\r\n\r\n";

            $out = "POST $url HTTP/1.1\r\n";
            $out .= "Host: $host\r\n";
            $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
            $out .= "Content-Length: ".strlen($data)."\r\n";
            $out .= "Referer: http://".$host.$url."\r\n";
            $out .= "X-CSRF-TOKEN:csrf_token()\r\n";
            $out .= "Cookie: username=admin;uid=200\r\n";
            $out .= "Connection: Close\r\n\r\n";

            fwrite($fp, $out);
            fclose($fp);
        }

    } 
  • 再次发起请求触发的代码如下

public function TestFsock () {
    $fp = fopen('file/test.txt', 'a');

    for ($i = 0; $i < 1000; $i ++ ) {
        fwrite($fp, '888888');
    }

    fclose($fp);
}
  • 路由如下

Route::get('/forsockopen', "TestController@ForFsockopen");
Route::post('/testfsock', "TestController@TestFsock");
// Route::get('/testfsock', "TestController@TestFsock");

我可以找到这个事件类,但是我找不到她的处理类。
所以我不明白这个事件到底做了什么事情。。。
按我的理解 应该是有一个事件类,一个事件处理类?

RegistersUsers 这个trait中的register方法

public function register(Request $request)
    {   
        $this->validator($request->all())->validate();

        **event(new Registered($user = $this->create($request->all())));**

        $this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

这个事件触发的处理类在哪里,@JellyBool
谢谢老大!我越来越喜欢@ 你了 哈哈