Nasıl etkinleştirmek ve kullanmak HTTP PUT ve Apache2'nin ve PHP ile DELETE için?

3 Cevap php

Bu kadar basit olmalıdır. Ben bulabildiğim her öğretici ve forum takip ettik, ama ben o iş için alınamıyor. Ben sadece Apache2'nin üzerinde PHP dinlendirici bir API kurmak istiyorum.

Benim VirtualHost diyorum:

<Directory />
    AllowOverride All
    <Limit GET HEAD POST PUT DELETE OPTIONS>
        Order Allow,Deny
        Allow from all
    </Limit>
</Directory>

Oysa ben sunucuya yaptığınız her PUT isteği, ben 405 yöntemi desteklenmiyor olsun.

Birisi Script yönergesi kullanılarak savundu, ama ben mod_php'yi kullanmak beri bu işe neden, CGI aksine, ben görmüyorum.

İnsanlar WebDAV kullanarak söz, ama bana bu overkill gibi görünüyor. Sonuçta, ben yapmak istediğim bir PHP komut dosyası üzerinde isteği geçmek ve her şeyi kendim idare vb DAV kilitleme, DAV dosya sistemi, gerek yok. Ben sadece PUT etkinleştirmek ve temiz bir semantik için DELETE istiyorum.

3 Cevap

Sen bir şey yapılandırmanız gerekmez. Sadece istekleri yolu bilgi ile PHP dosyası ve kullanım isteklerine Haritayı emin olun. Örneğin, kök varsa handler.php Bu içeriğin adında bir dosya:

<?php

var_dump($_SERVER['REQUEST_METHOD']);
var_dump($_SERVER['REQUEST_URI']);
var_dump($_SERVER['PATH_INFO']);

if (($stream = fopen('php://input', "r")) !== FALSE)
    var_dump(stream_get_contents($stream));

Aşağıdaki HTTP isteği çalışmak:

Established connection with 127.0.0.1 on port 81
PUT /handler.php/bla/foo HTTP/1.1
Host: localhost:81
Content-length: 5
 
boo
HTTP/1.1 200 OK
Date: Sat, 29 May 2010 16:00:20 GMT
Server: Apache/2.2.13 (Win32) PHP/5.3.0
X-Powered-By: PHP/5.3.0
Content-Length: 89
Content-Type: text/html
 
string(3) "PUT"
string(20) "/handler.php/bla/foo"
string(8) "/bla/foo"
string(5) "boo
"
Connection closed remotely.

Sen MultiViews ile "php" uzantısını gizlemek veya mod_rewrite ile URL'ler tamamen mantıklı yapabilirsiniz.

Ayrıca AcceptPathInfo direktifi ve nasıl make PHP not parse POST data when enctype is multipart/form-data Bu soru için belgelerine bakın.

Linux üzerinde, /etc/apache2/mods-enabled/php5.conf dans php5.load bulunmaktadır. Eğer değilse, bu modülleri sağlar (gerektirebilecek sudo apt-get install libapache2-mod-php5).

PUT kullanarak ve DELETE istekleri ile teknik sınırlamaları PHP veya Apache2 yalan değil; bu istekleri bu tür gönderilen tarayıcı yükü yerine olduğunu.

Basitçe

koyarak bu yöntemi desteklemek (ve onlar sadece FDSFGS gibi anlamsız tedavi gibi aynı PUT tedavi, GET varsayılan olacaktır) hiçbir tarayıcı olduğundan çalışmaz. (: Web hizmeti tüketiciler yani) Ne yazık ki bu HTTP fiilleri olmayan masaüstü uygulaması tarayıcılar alemine sınırlıdır.