CURLOPT_RETURNTRANSFER, зададен на true, не работи на хостинг сървър

Опитвам се да обработя резултат от $data = curl_exec($ch);, вместо да го отпечатам на екрана. За да постигна това, зададох опцията CURLOPT_RETURNTRANSFER на true така:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

На моя локален сървър това работи според очакванията, но когато поставя същия файл онлайн на моя сървър, той не работи.

Когато задам CURLOPT_RETURNTRANSFER на false, работи.

какво правя грешно


person Marcel Gent Simonis    schedule 04.09.2012    source източник
comment
Може би просто сте изчерпали (разрешената) памет на хостинг сървъра. Когато CURLOPT_RETURNTRANSFER е настроено на true, цялото извлечено съдържание се съхранява в паметта, когато е настроено на false, вие имате само буфера без ехо в паметта. За да проверите, просто се опитайте да вземете нещо много малко.   -  person Henning    schedule 28.03.2021


Отговори (3)


Ако зададете CURLOPT_RETURNTRANSFER на true или 1, тогава върнатата стойност от curl_exec ще бъде действителният резултат от успешната операция. С други думи, няма да върне TRUE при успех. Въпреки че ще върне FALSE при повреда.

Както е описано в раздела за връщани стойности на страницата с ръководство за PHP curl-exec: http://php.net/manual/function.curl-exec.php

Трябва да активирате опцията CURLOPT_FOLLOWLOCATION за пренасочвания, но това би било проблем, ако вашият сървър е в safe_mode и/или open_basedir е в сила, което може да причини проблеми и с curl.

person Anthony Hatzopoulos    schedule 04.09.2012
comment
може би неправилно зададох въпроса. Искам резултатът да бъде върнат в променливата. Така че зададох CURLOPT_RETURNTRANSFER на true и трябва да направи това, но не на хостинг сървър, но на localhost работи добре. може би някои настройки в php ini не са зададени, не знам. - person Marcel Gent Simonis; 05.09.2012
comment
@MarcelGentSimonis Редактирах отговора си, проверете какво са зададени safe_mode и open_basedir. Вашата локална машина вероятно ги е деактивирала - person Anthony Hatzopoulos; 03.10.2012
comment
Имайте предвид, че ако не е зададено на true, връщането от curl ще бъде изведено като част от вашият отговор. ми трябва един час, за да разбера, че странното извеждане в горната част на страницата е, защото curl изведе своя отговор. - person Accountant م; 18.12.2017
comment
Само да добавя, че safe_mode е елиминиран от php версия 5.4.0. Ако вашият сървър php версия е по-висока, не е нужно да се притеснявате за това - person Mbotet; 07.08.2019

Ако работи добре във вашата локална среда, вероятно IP адресът на вашия отдалечен сървър е блокиран от сървъра на целевия URL адрес, който сте задали за използване на cURL. Трябва да потвърдите, че вашият отдалечен сървър има достъп до URL адреса, който сте задали за CURLOPT_URL.

person rayalois22    schedule 29.10.2019

Просто опитайте този ред:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

след:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
person Ran Da    schedule 09.10.2017
comment
Защо? Какво прави това? Как това може да помогне на ОП? Разработете отговора си: трябва да помогнете на ОП да разбере какво не е наред, а не да го карате да опитва произволни неща :-) - person Erenor Paz; 18.10.2017
comment
@Ran Da Уважаеми, трябва или да изтриете отговора си, или да го редактирате. Споменавам ви тук, за да получите известие за отрицателните гласове, които получавате. - person fWd82; 21.05.2021