将命令行cURL转换为PHP cURL

将命令行cURL转换为PHP cURL,php,curl,Php,Curl,我以前从未做过卷发,所以我需要一些帮助。我试着从例子中解决这个问题,但我的头脑无法理解它 我有一个curl命令,可以从linuxubuntu命令行成功运行,该命令行通过api将文件放入wiki 我需要将这个curl命令合并到我正在构建的PHP脚本中 如何翻译此curl命令,使其在PHP脚本中工作 curl -b cookie.txt -X PUT \ --data-binary "@test.png" \ -H "Content-Type: image/png" \

我以前从未做过卷发,所以我需要一些帮助。我试着从例子中解决这个问题,但我的头脑无法理解它

我有一个curl命令,可以从linuxubuntu命令行成功运行,该命令行通过api将文件放入wiki

我需要将这个curl命令合并到我正在构建的PHP脚本中

如何翻译此curl命令,使其在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包含身份验证,但我在脚本中以明文的形式显示它时没有问题,因为它将仅由我运行

@test.png必须是一个变量,例如$filename

必须是一个变量,如$pageurl

感谢您的帮助。

起点:

<?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

...
?>
另请参见:

尝试以下操作:

$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);

-libcurl选项就是为了这个目的而添加的,尽管它是一个C程序,但我认为使用MYYN的答案作为起点,将其翻译成PHP应该相当容易,并且作为如何使用PHP cURL发送POST数据的参考,下面是我的建议,我目前正在做一些非常类似的事情:

<?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);
?>

如果需要,可以使用curl\u setopt\u数组调用来优化多个curl\u setopt。

这样更好。排成一行

$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);
你需要

curl到PHP:
立即将curl命令转换为PHP代码

无论您在命令行中使用何种curl,都可以使用此工具将其转换为PHP:

https://incarnate.github.io/curl-to-php/
经过长时间的寻找解决方案,它帮助了我!希望它也能帮到你!您的解决方案是:

// 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);

这是一个自动生成的列表,其中可能映射到哪个php CURLOPT_uuu常量:

-arg 描述 旋度 -a-附加 上载时附加到目标文件 -基本的 使用HTTP基本身份验证 -卡塞特 用于验证对等方的CA证书 -卡帕斯 用于验证对等机的CA目录 -电子证书 客户端证书文件和密码 -连接到 连接到主机 -饼干 从字符串/文件发送cookie -crlf 上传时将LF转换为CRLF -crlfile 从给定文件中获取PEM格式的CRL列表 -d-数据 HTTP POST数据 -授权 GSS-API委派权限 -消化 使用HTTP摘要身份验证 -dns接口 用于DNS请求的接口 -dns服务器 -引擎 要使用的加密引擎 -f-失败 静默失败HTTP错误上没有任何输出 -F-形式 指定多部分MIME数据 -ftp帐户 帐户数据字符串 -用户的ftp替代方案 替换用户[名称]的字符串 -P-ftp端口 -ftp跳过pasv ip 跳过PASV的IP地址 -ftp ssl ccc 验证后发送CCC -G-get 将post数据放入URL并使用GET -I-head 仅显示文档信息 -H-收割台 将自定义头传递给服务器 -http2 使用HTTP 2 -忽略内容长度 忽略远程资源的大小 -接口 使用网络接口或地址 -6-ipv6 将名称解析为IPv6地址 -钥匙 私钥文件名 -krb 启用具有安全性的Kerberos -本地港口 强制使用本地端口号的范围 -L-位置 跟随重定向 -登录选项 服务器登录选项 -邮件验证 -寄自 -邮件rcpt -协商 使用HTTP协商SPNEGO身份验证 -n-netrc 用户名和密码必须为.netrc -netrc文件 为netrc指定文件 -netrc可选 使用.netrc或URL -noproxy 不使用代理服务器的主机列表 -ntlm 使用HTTP NTLM身份验证 -ntlm wb 对winbind使用HTTP NTLM身份验证 -oauth2承载器 OAuth 2承载令牌 -通过 为私钥传递短语 -原样路径 不要挤。。URL路径中的序列 -羽状公钥 文件/哈希公钥以验证对等方 -原型 启用/禁用协议 -代理服务名称 SPNEGO代理服务名称 -p-代理隧道 使用CONNECT通过HTTP代理隧道进行操作 -公开密钥 SSH公钥文件名 -Q-报价 在传输之前向服务器发送命令 -随机文件 用于从中读取随机数据的文件 -r范围 仅检索范围内的字节 -电子参考 推荐人网址 -X-请求 指定要使用的请求命令 -决心 将主机+端口解析到此地址 -重试 如果出现暂时性问题,请重试请求 -sasl ir 在SASL身份验证中启用初始响应 -服务名称 SPNEGO服务名称 -袜子4 给定主机+端口上的SOCKS4代理 -袜子4A 给定主机+端口上的SOCKS4a代理 -袜子5 给定主机+端口上的SOCKS5代理 -萨皮袜子 为SOCKS5代理启用GSS-API身份验证 -socks5 gssapi nec 与NEC SOCKS5服务器的兼容性 -gssapi服务 GSS-API的SOCKS5代理服务名称 -socks5主机名 SOCKS5代理,将主机名传递给代理 -Y-速度限制 停止传输速度比这慢 -y速度时间 触发“速度限制”在此时间后中止 -ssl 尝试SSL/TLS -2-sslv2 使用SSLv2 -3-sslv3 使用SSLv3 -斯特德尔 在哪里重定向stderr -tcp快速开放 使用TCP快速打开 -tcp节点延迟 使用TCP_节点延迟选项 -t-telnet选项 设置telnet选项 -tftp blksize 设置TFTP BLKSIZE选项 -tftp无选项 不要发送任何TFTP选项 -1-tlsv1 使用TLSv1.0或更高版本 -unix套接字 骗局 通过此Unix域套接字连接 -网址 要使用的URL -u用户 服务器用户和密码 -v-冗长 让手术更具说服力 -V型 显示版本号并退出
我发布了一个类似这样的重复问题:。这个解决方案非常好,我想知道如果curl命令中有一些变量,比如curl-b$TEST-X PUT-data binary$CHECK等等,会怎么样。这还能用吗?@PratikJaiswal当然能用。但是你必须用双引号而不是单引号。这意味着您必须将代码中的“开始和结束”替换为“出于安全原因,是否有些服务器禁用了exec?但是,它并没有涵盖所有可用的curl选项-有关curl选项的PHP标志的完整列表,请参阅:我正要建议这样做。非常好的工具看起来是一个很好的工具…非常感谢:,我花了将近一天的时间来研究如何正确设置标题,我很高兴它能帮上忙。只是一个疯狂的想法-头也可以例如投票给我的答案和评论;