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_v1.diff

File 656_v1.diff, 2.9 KB (added by laurentj, 12 years ago)

premiere version du patch

  • lib/jelix/core/request/jClassicRequest.class.php

     
    2525    protected function _initParams(){
    2626
    2727        $url  = jUrl::parseFromRequest($this, $_GET);
    28         $this->params = array_merge($url->params, $_POST);
     28        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
     29            $this->params = array_merge($url->params, $_POST);
     30        }
     31        else if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
     32            $_PUT = $this->readHttpBody();
     33            if (is_string($_PUT))
     34                $this->params['__httpbody'] = $_PUT;
     35            else
     36                $this->params = array_merge($url->params, $_PUT);
     37        }
    2938    }
    3039
    3140}
  • lib/jelix/core/jRequest.class.php

     
    33* @package    jelix
    44* @subpackage core
    55* @author     Laurent Jouanneau
    6 * @contributor
     6* @contributor Greut
    77* @copyright  2005-2008 Laurent Jouanneau
     8* @copyright  2008 Greut
    89* @link        http://www.jelix.org
    910* @licence    GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
    1011*/
     
    182183
    183184        return $response;
    184185    }
     186
     187    /**
     188     * call it when you want to read the content of the body of a request
     189     * when the method is not GET or POST
     190     * @return mixed    array of parameters or a single string when the content-type is unknown
     191     * @since 1.1
     192     */
     193    public function readHttpBody() {
     194        $input = file_get_contents("php://input");
     195        $values = array();
     196
     197        if(strpos($_SERVER["CONTENT_TYPE"], "application/x-www-url-encoded") == 0) {
     198            parse_str($input, $values);
     199            return $values;
     200
     201        } else if(strpos($_SERVER["CONTENT_TYPE"], "multipart/form-data") == 0) {
     202
     203            if (!preg_match("/boundary=([a-zA-Z0-9]+)/", $_SERVER["CONTENT_TYPE"], $m))
     204                return $input;
     205
     206            $parts = explode('--'.$m[1], $input);
     207            foreach($parts as $part) {
     208                if (trim($part) == '' || $part == '--')
     209                    continue;
     210                list($header, $value) = explode("\r\n\r\n", $part);
     211                if(preg_match('/content\-disposition\:(?: *)form\-data\;(?: *)name="([^"]+)"(\;(?: *)filename="([^"]+)")?/i', $header, $m)) {
     212                    if(isset($m[2]) && $m[3] != '')
     213                        $return[$m[1]] = array( $m[3], $value);
     214                    else
     215                        $return[$m[1]] = $value;
     216                }
     217            }
     218            if (count($values))
     219                return $values;
     220            else return $input;
     221
     222        } else {
     223            return $input;
     224        }
     225    }
    185226}
    186227