2009-12-21 33 views
30

Nunca he hecho ningún curl antes, así que estoy en necesidad de alguna ayuda. ¡He intentado resolver esto a partir de ejemplos, pero no puedo entenderlo!Convertir línea de comando cURL a PHP cURL

Tengo un comando Curl que puedo ejecutar con éxito desde una línea de comandos de Linux (ubuntu) que coloca un archivo en una wiki a través de una API.

Necesitaría incorporar este comando curl en un script PHP que estoy construyendo.

¿Cómo puedo traducir este comando curl para que funcione en un script PHP?

curl -b cookie.txt -X PUT \ 
    --data-binary "@test.png" \ 
    -H "Content-Type: image/png" \  
    "http://hostname/@api/deki/pages/=TestPage/files/=test.png" \ 
    -0 

cookie.txt contiene la autenticación, pero no tengo un problema de poner esto en texto claro en la secuencia de comandos, ya que estará a cargo de mí sólo.

@ prueba.png debe ser una variable como el nombre del archivo $

http://hostname/@api/deki/pages/=TestPage/files/= debe ser una variable como $ PAGEURL

Gracias por cualquier ayuda.

+0

https://incarnate.github.io/curl-to-php/ parece una buena herramienta ... – Shatiz

Respuesta

27

un punto de partida:

<?php 

$pageurl = "http://hostname/@api/deki/pages/=TestPage/files/="; 
$filename = "test.png"; 

$theurl = $pageurl . $filename; 

$ch = curl_init($theurl); 
curl_setopt($ch, CURLOPT_COOKIE, ...); // -b 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary 
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: image/png']); // -H 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0 

... 
?> 

Ver también: http://www.php.net/manual/en/function.curl-setopt.php

5

Prueba esto:

$cmd='curl -b cookie.txt -X PUT \ 
    --data-binary "@test.png" \ 
    -H "Content-Type: image/png" \  
    "http://hostname/@api/deki/pages/=TestPage/files/=test.png" \ 
    -0'; 
exec($cmd,$result); 
+0

He publicado una pregunta duplicado como esto: http: // stackoverflow. com/questions/38064372/curl-command-in-php.Esta solución es bastante agradable y me pregunto qué pasaría si tuviera algunos 'vars' en el comando curl como' curl -b $ TEST -X PUT --data-binary $ CHECK' y así sucesivamente. ¿Esto todavía funcionaría? –

+0

@PratikJaiswal por supuesto que funcionará. Pero debe usar comillas dobles en lugar de comillas simples. eso significa que ha reemplazado comenzar y terminar 'con' y todo "en su código con ' – ananda

2

la opción --libcurl se añadió a tal efecto, a pesar de que hace un C programa Creo que debería ser bastante fácil de traducir a PHP

2

Uso de MY La respuesta de SN como punto de partida, y this page como una referencia sobre cómo enviar datos POST usando PHP cURL, aquí está mi sugerencia (estoy trabajando en algo muy similar en el momento):

<?php 

$pageurl = "http://hostname/@api/deki/pages/=TestPage/files/="; 
$filename = "test.png"; 

$theurl = $pageurl.$filename; 

$ch = curl_init($theurl); 
curl_setopt($ch, CURLOPT_COOKIE, ...); // -b 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary 
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: image/png']); // -H 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0 

$post = array("$filename"=>"@$filename"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
$response = curl_exec($ch); 
?> 

Probablemente se puede optimizar los muchos curl_setopts con el uso de una llamada curl_setopt_array() si lo desea.

1

Mejor esto. En una linea

$cmd='curl -b cookie.txt -X PUT --data-binary "@test.png" -H "Content-Type: image/png" "http://hostname/@api/deki/pages/=TestPage/files/=test.png" -0'; 
exec($cmd,$result); 
2

Es necesario ...

rizo-a-PHP: https://incarnate.github.io/curl-to-php/

"Convertir al instante comandos enrollamiento de código PHP"

+0

Sin embargo, no cubre todas las opciones de rizo disponibles - para ver la lista completa de las marcas de PHP para ver opciones de enrollamiento, consulte: http : //php.net/manual/en/function.curl-setopt.php – kris

+0

¡Gran herramienta kris, gracias! –

0

Whicvhever cURL que tiene en la línea de comandos, puede convertirlo a PHP con esta herramienta:

https://incarnate.github.io/curl-to-php/ 

¡Me ayudó después de largas horas de búsqueda de una solución! Espero que te ayude también! Su solución es la siguiente:

// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/ 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "http://hostname/@api/deki/pages/=TestPage/files/=test.png"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$post = array(
    "file" => "@" .realpath("test.png") 
); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); 


$headers = array(); 
$headers[] = "Content-Type: image/png"; 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$result = curl_exec($ch); 
if (curl_errno($ch)) { 
    echo 'Error:' . curl_error($ch); 
} 
curl_close ($ch);