500 - php curl_exec()方法 報(bào)500錯(cuò)誤
Jul 06, 2016 pm 01:52 PM
最近在用做商城的微信掃碼支付功能時(shí),在代碼構(gòu)建微信訂單然后通過curl向微信請求的時(shí)候,curl_exec函數(shù)報(bào)500錯(cuò)誤,且沒有詳細(xì)的錯(cuò)誤信息給出。之前用阿里云服務(wù)器、我的本地測試時(shí),均無問題,因?yàn)榭蛻粜枰F(xiàn)在程序放在了阿里云的虛擬主機(jī)上,就出現(xiàn)這個(gè)問題了,并且我確認(rèn)curl已開啟可以用,錯(cuò)誤顯示display_errors和error_reporting也已經(jīng)設(shè)置成顯示所有錯(cuò)誤。但:
1、只顯示500錯(cuò)誤,不顯示任何詳細(xì)的錯(cuò)誤信息。
2、該主機(jī)只能看到訪問日志,無法看到錯(cuò)誤日志,也無法看到和修改php.ini設(shè)置和apache設(shè)置等。
3、利用@、try catch也無法使這個(gè)錯(cuò)誤跳過,并且curl的資源參數(shù)也是正確的(我每個(gè)參數(shù)都打印過)
綜上所述,我仍未找到方法定位這個(gè)錯(cuò)誤,希望大神指導(dǎo)指導(dǎo)。
<code> $ch = curl_init(); //設(shè)置超時(shí) curl_setopt($ch, CURLOPT_TIMEOUT, $second); //如果有配置代理這里就設(shè)置代理 if(WxPayConfig::getValue('curl_proxy_host') != "0.0.0.0" && WxPayConfig::getValue('curl_proxy_port') != 0){ curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::getValue('curl_proxy_host')); curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::getValue('curl_proxy_port')); } curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴(yán)格校驗(yàn) //設(shè)置header curl_setopt($ch, CURLOPT_HEADER, FALSE); //要求結(jié)果為字符串且輸出到屏幕上 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if($useCert == true){ //設(shè)置證書 //使用證書:cert 與 key 分別屬于兩個(gè).pem文件 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::getValue('sslcert_path')); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::getValue('sslkey_path')); } //post提交方式 curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); //運(yùn)行curl $data = curl_exec($ch); //返回結(jié)果 if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); curl_close($ch); throw new WxPayException("curl出錯(cuò),錯(cuò)誤碼:$error"); }</code>
回復(fù)內(nèi)容:
最近在用做商城的微信掃碼支付功能時(shí),在代碼構(gòu)建微信訂單然后通過curl向微信請求的時(shí)候,curl_exec函數(shù)報(bào)500錯(cuò)誤,且沒有詳細(xì)的錯(cuò)誤信息給出。之前用阿里云服務(wù)器、我的本地測試時(shí),均無問題,因?yàn)榭蛻粜枰F(xiàn)在程序放在了阿里云的虛擬主機(jī)上,就出現(xiàn)這個(gè)問題了,并且我確認(rèn)curl已開啟可以用,錯(cuò)誤顯示display_errors和error_reporting也已經(jīng)設(shè)置成顯示所有錯(cuò)誤。但:
1、只顯示500錯(cuò)誤,不顯示任何詳細(xì)的錯(cuò)誤信息。
2、該主機(jī)只能看到訪問日志,無法看到錯(cuò)誤日志,也無法看到和修改php.ini設(shè)置和apache設(shè)置等。
3、利用@、try catch也無法使這個(gè)錯(cuò)誤跳過,并且curl的資源參數(shù)也是正確的(我每個(gè)參數(shù)都打印過)
綜上所述,我仍未找到方法定位這個(gè)錯(cuò)誤,希望大神指導(dǎo)指導(dǎo)。
<code> $ch = curl_init(); //設(shè)置超時(shí) curl_setopt($ch, CURLOPT_TIMEOUT, $second); //如果有配置代理這里就設(shè)置代理 if(WxPayConfig::getValue('curl_proxy_host') != "0.0.0.0" && WxPayConfig::getValue('curl_proxy_port') != 0){ curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::getValue('curl_proxy_host')); curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::getValue('curl_proxy_port')); } curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴(yán)格校驗(yàn) //設(shè)置header curl_setopt($ch, CURLOPT_HEADER, FALSE); //要求結(jié)果為字符串且輸出到屏幕上 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if($useCert == true){ //設(shè)置證書 //使用證書:cert 與 key 分別屬于兩個(gè).pem文件 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::getValue('sslcert_path')); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::getValue('sslkey_path')); } //post提交方式 curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); //運(yùn)行curl $data = curl_exec($ch); //返回結(jié)果 if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); curl_close($ch); throw new WxPayException("curl出錯(cuò),錯(cuò)誤碼:$error"); }</code>
一般來說虛擬主機(jī)會(huì)讓你看錯(cuò)誤日志的,不過可能是最后的多少條。
我猜想可能是超出內(nèi)存限制了吧,你提交工單問問。
何不貼代碼?
在php文件最開始加入以下代碼:
<code>set_error_handler(function(){ echo '<pre class="brush:php;toolbar:false">'; var_dump(func_get_args()); debug_print_backtrace(); },E_ERROR); set_error_handler(function(\Exception $e){ echo '<pre class="brush:php;toolbar:false">'; echo $e->getFile().PHP_EOL; echo $e->getLine().PHP_EOL; echo $e->getMessage().PHP_EOL; echo $e->getTraceAsString().PHP_EOL; });

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

Die Methode, um die aktuelle Sitzungs -ID in PHP abzurufen, besteht darin, die Funktion seision_id () zu verwenden. Sie müssen jedoch Session_start () aufrufen, um sie erfolgreich zu erhalten. 1. CALL Session_Start (), um die Sitzung zu starten; 2. Verwenden Sie Session_id (), um die Sitzungs -ID zu lesen und eine Zeichenfolge auszugeben, die wie ABC123DEF456GHI789 ?hnelt; 3. Wenn die Rückgabe leer ist, prüfen Sie, ob Session_Start () fehlt, ob der Benutzer zum ersten Mal zugreift oder ob die Sitzung zerst?rt wird. V. Stellen Sie sicher, dass die Sitzung korrekt aktiviert ist und die ID erfolgreich erhalten werden kann.

Um Substrings aus PHP -Zeichenfolgen zu extrahieren, k?nnen Sie die Substr () -Funktion verwenden, die Syntax -Substr (String $ String, int $ start, int $ l?nge = null) ist, und wenn die L?nge nicht angegeben ist, wird sie am Ende abgefangen. Bei der Verarbeitung von Multi-Byte-Zeichen wie Chinesisch sollten Sie die Funktion mb_substr () verwenden, um verstümmelte Code zu vermeiden. Wenn Sie die Zeichenfolge nach einem bestimmten Trennzeichen abfangen müssen, k?nnen Sie exploit () oder substr () zum Implementieren verwenden, z. B. das Extrahieren von Dateinamenverl?ngerungen oder Dom?nennamen.

UnittestinginphpinvolvesverifikationIndividualCodeUnits ?hnliche Funktionen-SetupphpunitviaComposer, CreateTeTeTD-Verzeichnis und Konfigurationsthearrange-Assertpat, writestcasesFoughingthearrarroadandhpunit.xml.2), writestcasesflowingthearrrange

In PHP besteht die h?ufigste Methode darin, die Zeichenfolge mithilfe der Funktion exploit () in ein Array aufzuteilen. Diese Funktion unterteilt die Zeichenfolge in mehrere Teile durch den angegebenen Trennzeichen und gibt ein Array zurück. Die Syntax ist Exploit (Separator, String, Grenze), wobei der Trennzeichen der Trennzeichen ist, die Zeichenfolge ist die ursprüngliche Zeichenfolge und die Grenze ist ein optionaler Parameter, um die maximale Anzahl von Segmenten zu steuern. Zum Beispiel $ str = "Apple, Banane, Orange"; $ arr = explode (",", $ str); Das Ergebnis ist ["Apple", "Bana

JavaScript -Datentypen sind in primitive Typen und Referenztypen unterteilt. Zu den primitiven Typen geh?ren String, Anzahl, Boolesche, Null, undefiniertes und Symbol. Die Werte sind unver?nderlich und Kopien werden bei der Zuweisung von Werten kopiert, sodass sie sich nicht gegenseitig beeinflussen. Referenztypen wie Objekte, Arrays und Funktionen speichern Speicheradressen, und Variablen, die auf dasselbe Objekt zeigen, wirkt sich gegenseitig aus. Typeof und Instanz k?nnen verwendet werden, um die Typen zu bestimmen, aber auf die historischen Probleme der TypeOfnull zu achten. Das Verst?ndnis dieser beiden Arten von Unterschieden kann dazu beitragen, einen stabileren und zuverl?ssigeren Code zu schreiben.

STD :: CHRONO wird in C verwendet, um die Zeit zu verarbeiten, einschlie?lich des Erhaltens der aktuellen Zeit, der Messung der Ausführungszeit, der Betriebszeit und -dauer und der Formatierungsanalysezeit. 1. Verwenden Sie std :: chrono :: system_clock :: Now (), um die aktuelle Zeit zu erhalten, die in eine lesbare Zeichenfolge konvertiert werden kann, aber die Systemuhr ist jedoch m?glicherweise nicht eint?nig. 2. Verwenden Sie STD :: Chrono :: Steady_clock, um die Ausführungszeit zu messen, um die Monotonie zu gew?hrleisten, und umwandeln Sie sie durch Duration_cast in Millisekunden, Sekunden und andere Einheiten; 3. Zeitpunkt (Time_Point) und Dauer (Dauer) k?nnen interoperabel sein, aber die Aufmerksamkeit der Einheitenkompatibilit?t und der Uhr -Epoche (Epoche) sollte beachtet werden.

NeuestaticbindingInphpallowsStatic :: TorefertotheclassinitialcalledatruntimininHeritancescenarios.vorphp5.3, self :: ImmerReferenceTtheClasswherethodhemethemethemethemetheDodwasdefined, UryingChildCass :: Sayhello () Toutput "Elternklasse"

Um eine Sitzungsvariable an eine andere Seite zu übergeben, besteht der Schlüssel darin, die Sitzung korrekt zu starten und den gleichen $ _Session -Schlüsselnamen zu verwenden. 1. Bevor Sie Sitzungsvariablen für jede Seite verwenden, muss sie als Session_start () bezeichnet und vor dem Skript platziert werden. 2. Setzen Sie Sitzungsvariablen wie $ _Session ['Benutzername'] = 'Johndoe' auf der ersten Seite; 3. Nachdem Sie Session_start () auf einer anderen Seite aufgerufen haben, greifen Sie auf die Variablen über denselben Schlüsselnamen zu. 4. Stellen Sie sicher, dass Session_Start () auf jeder Seite aufgerufen wird, vermeiden Sie im Voraus, Inhalte auszugeben, und überprüfen Sie, ob der Sitzungsspeicher auf dem Server beschreibbar ist. 5. Verwenden Sie SES
