J'ai trouvé l'existence du module mod_allowmethod:
<Location "/">
AllowMethods OPTIONS GET POST PUT DELETE
</Location>
<Directory /srv/tftp/foo>
Require all granted
Script PUT /srv/tftp/foo/file_upload.php
</Directory>

Malgré l'activation du module et la config ci-dessus, j'ai toujours :

$ curl -v -T foo.cfg http://192.168.1.1/foo/foo.cfg
...
> PUT /foo/foo.cfgt HTTP/1.1
> User-Agent: curl/7.38.0
...
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 405 Method Not Allowed
< Date: Mon, 26 Oct 2020 13:39:20 GMT
* Server Apache/2.4.38 (Debian) is not blacklisted
< Server: Apache/2.4.38 (Debian)
< Allow: OPTIONS,HEAD,GET,POST
< Content-Length: 296
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method PUT is not allowed for this URL.</p>
...

J'observe que la méthode PUT :
est bien envoyée
n'est pas incluse dans le header Allow du message d'erreur reçu en retour.

Une idée ?

Le mer. 21 oct. 2020 à 20:15, Olivier <oza.4...@gmail.com> a écrit :

> Bonjour,
>
> J'ai des fichiers dans une arboresence /srv/tftp/foo d'une machine sous
> Buster
> Je souhaite pouvoir "pousser" des fichiers dans cette arborescence avec la
> méthode PUT via un serveur Apache 2.4 sur lequel le paquet php est installé.
>
> Comment procéder proprement ?
>
> J'ai le fichier file_upload.php au contenu suivant:
>
> <?php
> //error_log("Current user is ".get_current_user());
>
> $data = file_get_contents("php://input");
> $output_filename = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];
>
> $code = file_put_contents($output_filename, $data);
> if (strlen($data) !== $code)
>    error_log("Error code while writing ".$output_filename.": input length
> is ".strlen($data)." while output length is ".$code);
>
> ?>
>
>
> J'ai aussi un fichier de config Apache, activé avec a2enconf :
> <VirtualHost *:80>
>
>     ServerAdmin webmaster@localhost
>
>     Alias /foo /srv/tftp/foo
>     DocumentRoot /srv/tftp/foo
>     ErrorLog ${APACHE_LOG_DIR}/error.log
>     CustomLog ${APACHE_LOG_DIR}/access.log combined
>
>     <Directory /srv/tftp/foo/>
>         Options Indexes FollowSymLinks MultiViews
>         AllowOverride None
>         Require all granted
>         Script PUT /srv/tftp/foo/file_upload.php
>     </Directory>
>
> </VirtualHost>
>
> J'ai:
> curl -T foo.cfg http://192.168.1.1/foo/foo.cfg
> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
> <html><head>
> <title>405 Method Not Allowed</title>
> </head><body>
> <h1>Method Not Allowed</h1>
> <p>The requested method PUT is not allowed for this URL.</p>
> <hr>
> <address>Apache/2.4.38 (Raspbian) Server at 192.168.1.1 Port 80</address>
> </body></html>
>
> Comment corriger ?
>
> Slts
>

Répondre à