developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #656: 656_v2.diff

File 656_v2.diff, 2.6 KB (added by greut, 12 years ago)

petit correctif, de la première version du patch (qui ne casse pas mon application existante)

  • www/lib/jelix/core/jRequest.class.php

    diff -r 1ad00f12340f www/lib/jelix/core/jRequest.class.php
    a b  
    234234
    235235        return $response;
    236236    }
     237
     238    /**
     239     * call it when you want to read the content of the body of a request
     240     * when the method is not GET or POST
     241     * @return mixed    array of parameters or a single string when the content-type is unknown
     242     * @since 1.1
     243     */
     244    public function readHttpBody() {
     245        $input = file_get_contents("php://input");
     246        $values = array();
     247
     248        if(strpos($_SERVER["CONTENT_TYPE"], "application/x-www-url-encoded") == 0) {
     249            parse_str($input, $values);
     250            return $values;
     251
     252        } else if(strpos($_SERVER["CONTENT_TYPE"], "multipart/form-data") == 0) {
     253
     254            if (!preg_match("/boundary=([a-zA-Z0-9]+)/", $_SERVER["CONTENT_TYPE"], $m))
     255                return $input;
     256
     257            $parts = explode('--'.$m[1], $input);
     258            foreach($parts as $part) {
     259                if (trim($part) == '' || $part == '--')
     260                    continue;
     261                list($header, $value) = explode("\r\n\r\n", $part);
     262                if(preg_match('/content\-disposition\:(?: *)form\-data\;(?: *)name="([^"]+)"(\;(?: *)filename="([^"]+)")?/i', $header, $m)) {
     263                    if(isset($m[2]) && $m[3] != '')
     264                        $return[$m[1]] = array( $m[3], $value);
     265                    else
     266                        $return[$m[1]] = $value;
     267                }
     268            }
     269            if (count($values))
     270                return $values;
     271            else return $input;
     272
     273        } else {
     274            return $input;
     275        }
     276    }
    237277}
    238278
    239279?>
  • www/lib/jelix/core/request/jClassicRequest.class.php

    diff -r 1ad00f12340f www/lib/jelix/core/request/jClassicRequest.class.php
    a b  
    2525    protected function _initParams(){
    2626
    2727        $url  = jUrl::parse($this->urlScript, $this->urlPathInfo, $_GET);
    28         $this->params = array_merge($url->params, $_POST);
     28        if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
     29            $_PUT = $this->readHttpBody();
     30            if (is_string($_PUT))
     31                $this->params['__httpbody'] = $_PUT;
     32            else
     33                $this->params = array_merge($url->params, $_PUT);
     34        } else {
     35            $this->params = array_merge($url->params, $_POST);
     36        }
    2937    }
    30 
    3138}
    32 ?>
    33  No newline at end of file
     39?>