相关疑难解决方法(0)

如何在PHP中获取有用的错误消息?

我觉得用PHP编程非常令人沮丧.我经常尝试运行脚本,然后再回一个空白屏幕.没有错误消息,只是空屏幕.原因可能是一个简单的语法错误(错误的括号,缺少分号),或者函数调用失败,或其他完全错误.

弄清楚出了什么问题是非常困难的.我最终评论出代码,在任何地方输入"echo"语句等等,试图缩小问题范围.但肯定有一个更好的方法,对吗?

那么,有没有办法让PHP产生像Java那样有用的错误信息呢?任何人都可以推荐良好的PHP调试技巧,工具和技术?

php debugging error-handling

563
推荐指数
28
解决办法
57万
查看次数

HTTP测试服务器接受GET/POST请求

我需要一个实时测试服务器,它通过HTTP GET接受我对基本信息的请求,并允许我POST(即使它真的没有做任何事情).这完全是出于测试目的.

一个很好的例子是在这里.它很容易接受GET请求,但我也需要一个接受POST请求的请求.

有没有人知道我可以发送虚拟测试消息的服务器?

post http

428
推荐指数
13
解决办法
34万
查看次数

我可以多次使用CURLOPT_HTTPHEADER调用curl_setopt来设置多个标头吗?

我可以打电话curl_setoptCURLOPT_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)

php curl

66
推荐指数
2
解决办法
12万
查看次数

如何获取有关已发送的PHP curl请求的信息

我正在尝试将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 curl web-services

45
推荐指数
2
解决办法
10万
查看次数

验证curl是否正在使用TLS

在我的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 ssl curl

43
推荐指数
2
解决办法
5万
查看次数

尝试访问本地文件时会导致curl返回false的原因是什么?

这个网站现在已经运行了几个月,并且一直运行良好.我有一个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我刚尝试从外部服务器(不同的域)进行这个确切的调用,它工作得很好.

php curl

14
推荐指数
1
解决办法
3万
查看次数

CURL执行返回空响应并显示

我在我的项目中使用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已启用.如果有人遇到类似的问题,请分享解决方案.

php curl

7
推荐指数
2
解决办法
3万
查看次数

Twitter 1.1 OAuth authenticity_token_error(99)

我使用以下代码来获取持票人令牌:

$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"}]}

我做错了什么?

php curl twitter-oauth

6
推荐指数
2
解决办法
4173
查看次数

带有显式 TLS/SSL 的 PHP curl FTPes

我一直在尝试使用显式 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)

php ftp ssl curl ftps

5
推荐指数
1
解决办法
6674
查看次数

CURLOPT_VERBOSE不起作用

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)

php windows curl response

5
推荐指数
1
解决办法
2552
查看次数