curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$thi

2023-10-11php开发问题
7

本文介绍了curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this,'readHeader')) 不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有这个包装器可以从 Joomla 中加载一个 symfony 项目

I have this wrapper to load a symfony project from within Joomla

class NZGBCComponentHelper {
    function requestAndFollow($path = '') {
        $c = 0;$first = 1;$httpcode = 0;
        $uri = JRequest::getVar('uri');
        while ($c <= 4 && ($first || $httpcode == 302)){
            $first = 0;
            $finalSfUrl = NZGBCComponentHelper::buildRequestUri($uri, $path);

            $ch = curl_init($finalSfUrl);

            if(JRequest::getMethod() == 'POST' && $httpcode != 302){
                curl_setopt($ch, CURLOPT_POST, 1);
                $postThrough = array_merge(JRequest::get($_POST),array('_csrf_token' => $_POST['_csrf_token']));
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postThrough));
            }

            // Get sf content
            curl_setopt($ch, CURLOPT_REFERER, JURI::getInstance()->root().$path);
            curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'readHeader');
            curl_setopt($ch, CURLOPT_HEADER, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch, CURLOPT_COOKIE, 'symfony='.$_COOKIE['symfony']);

            $return = curl_exec($ch);
            $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);


            if (!$return){
                $error = curl_error($ch);
            }

            if($this->headers['Set-Cookie']){
                JResponse::setHeader('Set-Cookie', $mainframe->sym_headers['Set-Cookie']);
            }
            if ($httpcode >= 400){
                $return = "There was an <!--$finalSfUrl-->  error ";
                mail ('jd@automatem.co.nz', 'symfony wrapper error',
                $finalSfUrl."
".
                $httpcode."
".
                $return
                );

            }else if ($httpcode == 302){
                $query = parse_url(trim($mainframe->sym_headers['Location']), PHP_URL_QUERY);
                parse_str($query);
                parse_str($uri);
                if ($outside == 'true'){
                    JApplication::redirect(trim(urldecode($uri)));
                }
            }
            curl_close($ch);
            $c++;
        }
        return $return;

    }
    }

    if (!function_exists('readHeader')){
    function readHeader($ch, $header){

        $mainframe =& JFactory::getApplication();
        if($pos = strpos($header, ':')){
            $mainframe->sym_headers[substr($header, 0, $pos)] = substr(strstr($header, ':'), 1);
        }

        return strlen($header);
    }
}

requestAndFollow 是静态调用的.如何引用 readHeader() 而不是将其放入全局函数空间.我试过了:

requestAndFollow is statically called. How can I refer to readHeader() instead of putting it into the global function space. I tried:

curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this,'readHeader'));//didn't expect this to work - no $this when statically called


curl_setopt($ch, CURLOPT_HEADERFUNCTION, array('NZGBCComponentHelper','readHeader'));


curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(self,'readHeader'));

推荐答案

看来这在

  • libcurl 7.19.7、Ubuntu 10.10、PHP 5.3.2

但不在

  • Debian Lenny 上的 libcurl 7.18.2,PHP 5.2.6

两个版本的工作解决方法是将头函数放在全局空间中

A working workaround on both versions is to put the header function in the global space

curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'readHeader');

这篇关于curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&amp;$this,'readHeader')) 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17