


使用php curl函数时提示Warning: curl_setopt() [function.curl-setopt]: CURLO…错误该怎么解决
如果当你在PHP中运行 CURLOPT_FOLLOWLOCATION 然后得到php提示错误信息为:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set…
错误中提到两个关键safe_mode和 open_basedir,如果你是虚拟主机的没有设置APPCHE的权限是不能通过修改服务器配置来解决问题的,一般来说,服务器配置safe_mode都为off,然后为了一些安全对用户有一些限制,通过设置open_basedir来限制虚拟主机用户的PHP执行文件夹,因此当你使用CURLOPT_FOLLOWLOCATION (php curl函数,深层抓取数据)的时候,一旦有301转向等就会出现文中提到的错误信息.
在查了相关资料后,很快找到了解决办法,http://www.php.cn/php-weizijiaocheng-362563.html,这些方法都在php官方帮助里有.
具体做法是在curl语句用不使用curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true),在php函数中自定义一个函数,
代码如下:
function curl_redir_exec($ch,$debug="") { static $curl_loops = 0; static $curl_max_loops = 20; if ($curl_loops++ >= $curl_max_loops) { $curl_loops = 0; return FALSE; } curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); $debbbb = $data; list($header, $data) = explode("\n\n", $data, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) { $matches = array(); preg_match('/Location:(.*?)\n/', $header, $matches); $url = @parse_url(trim(array_pop($matches))); //print_r($url); if (!$url) { //couldn't process the url to redirect to $curl_loops = 0; return $data; } $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); /* if (!$url['scheme']) $url['scheme'] = $last_url['scheme']; if (!$url['host']) $url['host'] = $last_url['host']; if (!$url['path']) $url['path'] = $last_url['path'];*/ $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:''); curl_setopt($ch, CURLOPT_URL, $new_url); // debug('Redirecting to', $new_url); return curl_redir_exec($ch); } else { $curl_loops=0; return $debbbb; } }
函数定义好后,curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true)这条语句替换为curl_redir_exec($ch)
这样以后,我想你的PHP文件应该不会提示错误了,关于这段代码,在提供PHP官方连接用可以找到.
php官方的代码如下
/safe 模式不能curl的函数 function curl_redir_exec($ch) { static $curl_loops = 0; static $curl_max_loops = 20; if ($curl_loops++ >= $curl_max_loops) { $curl_loops = 0; return FALSE; } curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); list($header, $data) = explode("\n\n", $data, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) { $matches = array(); preg_match('/Location:(.*?)\n/', $header, $matches); $url = @parse_url(trim(array_pop($matches))); if (!$url) { //couldn't process the url to redirect to $curl_loops = 0; return $data; } $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); if (!$url['scheme']) $url['scheme'] = $last_url['scheme']; if (!$url['host']) $url['host'] = $last_url['host']; if (!$url['path']) $url['path'] = $last_url['path']; $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:''); curl_setopt($ch, CURLOPT_URL, $new_url); debug('Redirecting to', $new_url); return curl_redir_exec($ch); } else { $curl_loops=0; return $data; } } //end
【相关文章推荐】
2.使用php curl_setopt()函数实现抓取网页与POST数据的简单例子
Atas ialah kandungan terperinci 使用php curl函数时提示Warning: curl_setopt() [function.curl-setopt]: CURLO…错误该怎么解决. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Jika anda menemui mesej ralat semasa menggunakan pencetak anda, seperti operasi tidak dapat diselesaikan (ralat 0x00000771), ini mungkin kerana pencetak telah diputuskan sambungan. Dalam kes ini, anda boleh menyelesaikan masalah melalui kaedah berikut. Dalam artikel ini, kami akan membincangkan cara membetulkan isu ini pada Windows 11/10 PC. Keseluruhan mesej ralat berkata: Operasi tidak dapat diselesaikan (ralat 0x0000771). Pencetak yang ditentukan telah dipadamkan. Betulkan 0x00000771 Ralat Pencetak pada Windows PC Untuk membetulkan Ralat Pencetak operasi tidak dapat diselesaikan (Ralat 0x0000771), pencetak yang ditentukan telah dipadamkan pada Windows 11/10 PC, ikut penyelesaian ini: Mulakan semula Print Spool

Adakah Windows Sandbox ditamatkan dengan Windows Sandbox Unable to Start, Ralat 0x80070005, Access Denied message? Sesetengah pengguna melaporkan bahawa Windows Sandbox tidak boleh dibuka. Jika anda juga menghadapi ralat ini, anda boleh mengikuti panduan ini untuk membetulkannya. Windows Sandbox gagal dimulakan - Access Denied Jika Windows Sandbox ditamatkan dengan Windows Sandbox Unable to Start, Ralat 0x80070005, Access Denied message, pastikan anda log masuk sebagai pentadbir. Ralat jenis ini biasanya disebabkan oleh kebenaran yang tidak mencukupi. Jadi cuba log masuk sebagai pentadbir dan lihat sama ada itu menyelesaikan masalah itu. Jika masalah berterusan, anda boleh mencuba penyelesaian berikut: Jalankan Wi-Fi sebagai pentadbir

Menyahsulit kod status HTTP 460: Mengapakah ralat ini berlaku? Pengenalan: Dalam penggunaan rangkaian harian, kami sering menghadapi pelbagai gesaan ralat, termasuk kod status HTTP. Kod status ini ialah mekanisme yang ditakrifkan oleh protokol HTTP untuk menunjukkan pemprosesan permintaan. Di antara kod status ini, terdapat kod ralat yang agak jarang berlaku, iaitu 460. Artikel ini akan menyelidiki kod ralat ini dan menerangkan sebab ralat ini berlaku. Definisi kod status HTTP 460: Pertama, kita perlu memahami asas kod status HTTP

Jadual Kandungan Penyelesaian 1 Penyelesaian 21. Padamkan fail sementara Windows Update 2. Membaiki fail sistem yang rosak 3. Lihat dan ubah suai entri pendaftaran 4. Matikan kad rangkaian IPv6 5. Jalankan alat WindowsUpdateTroubleshooter untuk membaiki 6. Matikan firewall dan perisian anti-virus lain yang berkaitan. 7. Tutup perkhidmatan WidowsUpdate. Penyelesaian 3 Penyelesaian 4 Ralat "0x8024401c" berlaku semasa kemas kini Windows pada komputer Huawei Gejala Masalah Punca Penyelesaian Masih tidak diselesaikan? Baru-baru ini, pelayan web perlu dikemas kini kerana kelemahan sistem Selepas log masuk ke pelayan, kemas kini menggesa kod ralat 0x8024401c

AutoCAD adalah salah satu perisian reka bentuk lukisan yang paling biasa digunakan, tetapi apabila kami ingin menggunakannya pada win11, kami mungkin menghadapi ralat semasa memasang autocad pada win11 Pada masa ini, kami boleh cuba mengubah suai pendaftaran untuk menyelesaikannya. Ralat berlaku semasa memasang autocad dalam win11: Langkah pertama, tekan "logo win + r" pada papan kekunci untuk membuka larian. Dalam langkah kedua, masukkan "regedit" dan tekan Enter untuk membuka pendaftaran. 3. Tampal "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" ke dalam laluan di atas. 4. Selepas memasukkan, klik dua kali

Untuk mengemas kini versi curl di bawah Linux, anda boleh mengikuti langkah di bawah: Semak versi curl semasa: Pertama, anda perlu menentukan versi curl yang dipasang dalam sistem semasa. Buka terminal dan laksanakan arahan berikut: curl --version Perintah ini akan memaparkan maklumat versi curl semasa. Sahkan versi curl tersedia: Sebelum mengemas kini curl, anda perlu mengesahkan versi terkini yang tersedia. Anda boleh melawati tapak web rasmi curl (curl.haxx.se) atau sumber perisian yang berkaitan untuk mencari versi terkini curl. Muat turun kod sumber curl: Menggunakan curl atau penyemak imbas, muat turun fail kod sumber untuk versi curl pilihan anda (biasanya .tar.gz atau .tar.bz2

Jika anda menghadapi kod ralat 0x80070003 semasa menggunakan Hyper-V untuk mencipta atau memulakan mesin maya, ia mungkin disebabkan oleh isu kebenaran, kerosakan fail atau ralat konfigurasi. Penyelesaian termasuk menyemak kebenaran fail, membaiki fail yang rosak, memastikan konfigurasi yang betul dan banyak lagi. Masalah ini boleh diselesaikan dengan menolak kemungkinan yang berbeza satu demi satu. Keseluruhan mesej ralat kelihatan seperti ini: Pelayan mengalami ralat semasa membuat [nama mesin maya]. Tidak dapat mencipta mesin maya baharu. Tidak dapat mengakses stor konfigurasi: Sistem tidak dapat mencari laluan yang ditentukan. (0x80070003). Beberapa kemungkinan punca ralat ini termasuk: Fail mesin maya rosak. Ini boleh berlaku disebabkan oleh serangan perisian hasad, virus atau adware. Walaupun kemungkinan ini berlaku adalah rendah, anda tidak boleh sepenuhnya

Petua Praktikal untuk Menyelesaikan Ralat Tomcat404 dengan Pantas Tomcat ialah pelayan aplikasi JavaWeb yang biasa digunakan dan sering digunakan semasa membangunkan dan menggunakan aplikasi JavaWeb. Walau bagaimanapun, kadangkala kita mungkin menghadapi ralat 404 daripada Tomcat, yang bermaksud bahawa Tomcat tidak dapat mencari sumber yang diminta. Ralat ini boleh disebabkan oleh pelbagai faktor, tetapi dalam artikel ini, kami akan membincangkan beberapa penyelesaian dan petua biasa untuk membantu anda menyelesaikan ralat Tomcat 404 dengan cepat. Semak laluan URL
