我觉得用PHP编程非常令人沮丧.我经常尝试运行脚本,然后再回一个空白屏幕.没有错误消息,只是空屏幕.原因可能是一个简单的语法错误(错误的括号,缺少分号),或者函数调用失败,或其他完全错误.
弄清楚出了什么问题是非常困难的.我最终评论出代码,在任何地方输入"echo"语句等等,试图缩小问题范围.但肯定有一个更好的方法,对吗?
那么,有没有办法让PHP产生像Java那样有用的错误信息呢?任何人都可以推荐良好的PHP调试技巧,工具和技术?
我需要一个实时测试服务器,它通过HTTP GET接受我对基本信息的请求,并允许我POST(即使它真的没有做任何事情).这完全是出于测试目的.
一个很好的例子是在这里.它很容易接受GET请求,但我也需要一个接受POST请求的请求.
有没有人知道我可以发送虚拟测试消息的服务器?
我可以打电话curl_setopt与CURLOPT_HTTPHEADER多次设置多个标头?
$url = 'http://www.example.com/';
$curlHandle = curl_init($url);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array('Content-type: application/xml'));
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array('Authorization: gfhjui'));
$execResult = curl_exec($curlHandle);
Run Code Online (Sandbox Code Playgroud) 我正在尝试将curl请求调试到webservice'getToken'端点.
我并不是100%确信URL和身份验证信息正确地写入了卷曲句柄.
我正在尝试curl_getinfo($ch, CURLINFO_HEADER_OUT);捕获已发送的请求,但它并没有给我太多信息.有没有办法更深入地诊断实际的卷曲请求是什么样的?
这是代码:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HEADER, 1); // just getting header to see if we got an auth token
curl_setopt($ch, CURLOPT_FILE, $fh);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1); // capture the header info
curl_setopt($ch, CURLOPT_VERBOSE, 1); // turn verbose on
// execute the curl request
$rh = fopen("request.txt", "w"); // open request file handle
$verbose = fopen('php://temp', 'rw+');
curl_setopt($ch, CURLOPT_STDERR, $verbose);
curl_exec($ch); // execute request
$sent_request = curl_getinfo($ch, …Run Code Online (Sandbox Code Playgroud) 在我的PHP应用程序中,我使用PHP的CURL和openssl,使用SOAP进行连接和对话.到目前为止,远程服务器支持SSL和TLS,但由于"poodle"错误,管理员决定禁用SSL并仅使用TLS.SSL支持到1月底.
我通过添加以下内容更改了代码
curl_setopt($objCurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
Run Code Online (Sandbox Code Playgroud)
理论上应该强制卷曲使用TLSv1.2.
但那是理论 - 我需要验证它实际上是否使用了TLS - 有什么方法吗?有一个名为curl_getinfo()的方法,但它返回的信息对我没用:
[url] => https://www.example.com/soap/MessagingPort
[content_type] => text/xml;charset=utf-8
[http_code] => 200
[header_size] => 293
[request_size] => 882
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.164487
[namelookup_time] => 3.4E-5
[connect_time] => 3.4E-5
[pretransfer_time] => 0.000122
[size_upload] => 604
[size_download] => 178
[speed_download] => 1082
[speed_upload] => 3672
[download_content_length] => 178
[upload_content_length] => 604
[starttransfer_time] => 0.164477
[redirect_time] => 0
Run Code Online (Sandbox Code Playgroud)
非常感谢提前
这个网站现在已经运行了几个月,并且一直运行良好.我有一个PHP页面,它根据网址中的数据创建发票(例如,viewinvoice.php?id = 250根据记录250建立发票).此页面可通过Web浏览器访问,并且工作正常.
在一个完全不同的页面(即test.php)上,我试图通过cURL访问该文件.但是,当我进行调用并且var_dump结果时,我得到bool(false).
这是进行cURL调用的函数:
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
Run Code Online (Sandbox Code Playgroud)
HOME是一个表示完整URL的常量(例如http://www.example.com/).
$invoice_contents = file_get_contents_curl(HOME.'viewinvoice.php?id=242');
echo $invoice_contents;
var_dump( $invoice_contents );
Run Code Online (Sandbox Code Playgroud)
我已经尝试将网址更改为外部网址(即http://www.google.com/),页面加载就好了.我得到谷歌的主页.但是同一域中的任何页面都不会加载.这有可能发生吗?
我不是服务器管理员,但我有权访问服务器.我最近没有更改任何设置,但服务器管理员可能已经升级了apache或php的版本?
在任何情况下,是否有我可以修改的设置以使其再次工作?
PS我刚尝试从外部服务器(不同的域)进行这个确切的调用,它工作得很好.
我在我的项目中使用CURL,它在本地工作正常但如果我使用相同的代码它没有执行,我试图调试它.输出如下:
Took 0 seconds to send a request to https://www.google.co.in
Run Code Online (Sandbox Code Playgroud)
我使用了以下示例代码:
$handle=curl_init('https://www.google.co.in');
curl_setopt($handle, CURLOPT_VERBOSE, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
$content = curl_exec($handle);
if(!curl_errno($handle))
{
$info = curl_getinfo($handle);
echo '<br/> Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}
else
{
echo 'Curl error: ' . curl_error($handle);
}
echo $content;
Run Code Online (Sandbox Code Playgroud)
问题在服务器中,我不知道在php.ini中启用什么.
请注意,在服务器中,CURL和SSL已启用.如果有人遇到类似的问题,请分享解决方案.
我使用以下代码来获取持票人令牌:
$token = base64_encode($client_id.':'.$client_sec);
$data = array ('grant_type' => 'client_credentials');
$data = http_build_query($data);
$header = array(
'Authorization: Basic '.$token,
'Content-type: application/x-www-form-urlencoded;charset=UTF-8',
'Content-Length: ' . strlen($data)
);
$options = array(
CURLOPT_HTTPHEADER => $header,
CURLOPT_HEADER => false,
CURLOPT_URL => 'https://api.twitter.com/oauth2/token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => $data
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
print_r($result);
exit;
Run Code Online (Sandbox Code Playgroud)
但是一直输出:
{"errors":[{"label":"authenticity_token_error","code":99,"message":"Unable to verify your credentials"}]}
我做错了什么?
我一直在尝试使用显式 TLS/SSL 服务器推送到远程 FTP,但连接一直超时。它正在连接,但我不知道它在哪里停止,但我假设它与 FTP/TLS/SSL 控制通道有关。任何帮助将不胜感激。
通过 FileZilla,我可以毫无问题地进行连接,但不能通过 curl 进行连接。我可能遗漏了一些东西,希望这里有人知道使用 curl 重新创建会话的最佳方法。这是 FileZilla 的调试输出和我一直在 PHP/curl 中处理的示例代码。这是 PHP 代码,下面是成功的 FileZilla 会话的副本。
这是版本,但我已经在不同的系统上尝试过,结果相同。
Curl: v7.43.0
??(08:04:00 on master ?)??> php -v ??(Thu,Sep10)??
PHP 5.5.27 (cli) (built: Jul 14 2015 17:04:01)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans
Run Code Online (Sandbox Code Playgroud)
这是实际的代码。
<?php
$server_data = array(
'transfer_id' => 123456789,
'post_url' => "ftps://ftps.widgetsltd.com",
'port' => 21,
'username' => 'widgetsftp',
'password' => …Run Code Online (Sandbox Code Playgroud) Windows 7 x64
PHP 7.2.2 x64
Run Code Online (Sandbox Code Playgroud)
我正在尝试查看简单的请求有效负载,因此我已经按照https://docstore.mik.ua/orelly/webprog/pcook/ch11_07.htm创建了一个PHP文件
<?php
$c = curl_init('https://www.google.com');
curl_setopt($c, CURLOPT_VERBOSE, 1);
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, 'monkey=uncle&rhino=aunt');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($c);
curl_close($c);
Run Code Online (Sandbox Code Playgroud)
但与示例不同,该示例表明我可以期望得到类似以下内容,但我绝对没有输出:
* Connected to www.example.com (10.1.1.1)
> POST /submit.php HTTP/1.1
Host: www.example.com
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
monkey=uncle&rhino=aunt* Connection #0 left intact
* Closing connection #0
Run Code Online (Sandbox Code Playgroud)
$page 包含一个Google 404页面,所以我知道请求成功了。
有人知道我是否需要解决其他设置,或者我做错了什么?我特别对有效载荷的主体感兴趣。
是的,我知道Google卷曲并不是特别有用;我试图使这个简单的示例正常工作,以便我可以调试神秘地失败的API交互。
根据评论请求进行更新
我不能做,curl -v但是print_r( curl_version() );会产生:
Array
(
[version_number] => …Run Code Online (Sandbox Code Playgroud)