cUrl berfungsi dengan baik di localhost tetapi tidak berfungsi di server dan hanya menampilkan halaman kosong

Ketika saya menjalankan kode di bawah ini di server hanya menampilkan halaman kosong dan tiba-tiba menghentikan eksekusi lebih lanjut, saya juga memeriksa cUrl di server yang diinstal.

Ini kode saya.

$ftp_server = 'ftps://'.'server/Voorraadtonen link.csv'; 
$ch = curl_init(str_replace(" ","%20",$ftp_server));
curl_setopt($ch, CURLOPT_URL, $ftp_server);
curl_setopt($ch, CURLOPT_USERPWD,'username'.':'.'password');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
curl_setopt($ch, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS);
//curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_PORT, 990);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
curl_setopt($ch, CURLOPT_VERBOSE,true);
$output = curl_exec($ch);
$error_no = curl_errno($ch);
echo $output; exit;

person Haq Nawaz    schedule 26.01.2020    source sumber
comment
baca file error_log Anda dan aktifkan pelaporan kesalahan pada curl atau pelaporan kesalahan php if(curl_errno($ch)){ throw new Exception(curl_error($ch)); }   -  person Dlk    schedule 26.01.2020
comment
sudah mengaktifkan pelaporan kesalahan error_reporting(E_ALL); ini_set('tampilan_kesalahan', 1);   -  person Haq Nawaz    schedule 26.01.2020
comment
Anda seharusnya mendapatkan kesalahan, gunakan kode saya yang diberikan dalam komentar dan baca file error_log Anda   -  person Dlk    schedule 26.01.2020
comment
Saya menggunakannya tetapi tidak ada yang terlihat   -  person Haq Nawaz    schedule 26.01.2020
comment
Coba ini di url Anda curl -u user:password 'ftps://mysite/%2fusers/myfolder/myfile/csv' -o ~/folder/link.csv   -  person Dlk    schedule 26.01.2020
comment
Saya rasa Anda tidak bisa mendapatkan apa pun dari url ini ftps://'.'server/Voorraadtonen link.csv   -  person Dlk    schedule 26.01.2020
comment
Apakah Anda mendapatkan sesuatu di $error_no?   -  person Nigel Ren    schedule 26.01.2020
comment
Tidak, saya tidak mendapatkan apa pun di $error_no   -  person Haq Nawaz    schedule 26.01.2020


Jawaban (1)


Pembaruan terkini!

Anda memiliki lebih dari 1 kesalahan dalam kode Anda,

Anda menggunakan FTPS di url yang memerlukan verifikasi SSL, dan kode Anda salah.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//Dont use try! you shouldnt use
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);

Mereka harus benar: SSL tidak mendukung benar sehingga mereka harus seperti mengikuti @dharman memperingatkan dalam jawaban lain.

Tetapi mengubah SSL menjadi kenyataan akan memerlukan pengaturan lain seperti file cacert dll

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
//and include cacert.pem
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');

Unduh file cacert di sini: https://curl.haxx.se/docs/caextract.html

2. Url Anda bukan url sebenarnya $ftp_server = 'ftps://'.'server/Voorraadtonen link.csv';, url ini tidak akan mendapatkan apa pun, tetapi harus mengembalikan kesalahan setidaknya dalam file error_log, seperti yang Anda katakan semua pelaporan kesalahan diaktifkan

3. Kode Anda akan terlihat seperti ini

$curl = curl_init();
$file = fopen("link.csv", 'w');
curl_setopt($curl, CURLOPT_URL, "ftp://ftp.site.com/link.csv"); 
//Make sure for correct url
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
//Make sure for correct url
curl_setopt($curl, CURLOPT_FILE, $file); 
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
//Make sure for your ftp credentials
curl_setopt($curl, CURLOPT_TIMEOUT, 20); //20 seconds will be enough
curl_exec($curl);
echo curl_errno($ch);
echo curl_error($ch);
curl_close($curl);
fclose($file);

1 hal lagi tajuk kiri tidak diperlukan tetapi jika diperlukan.

curl_setopt($curl, CURLOPT_HEADER, false); //Or
curl_setopt($curl, CURLOPT_HEADER, true);

Sekarang seharusnya berfungsi tanpa masalah apa pun

CATATAN : Kode contoh adalah contoh kerja yang dapat Anda edit sesuai kebutuhan Anda

PEMBARUAN : Setelah modifikasi yang Anda katakan telah Anda lakukan pada kode Anda (Masih tidak ditampilkan kepada kami), akhirnya kami mendapatkan kesalahan. sekali lagi saya meminta Anda untuk menambahkan kode yang dimodifikasi ke dalam pertanyaan Anda.

Error_no 28 kesalahan cURL 28: Waktu koneksi habis

kesalahan cURL 28 terjadi ketika permintaan cURL tidak diselesaikan dalam jangka waktu tertentu.

Hal ini terjadi ketika nilai batas waktu cURL disetel terlalu rendah atau ketika firewall memblokir permintaan cURL.

Kemungkinan lainnya adalah modul keamanan, misalnya modul Apache mod_security.

Untuk memperbaiki cURL error 28 Anda dapat menghubungi penyedia hosting Anda.

Jadi pada dasarnya!

Server Anda memblokir. kredensial Anda tidak cocok dengan kredensial yang diperlukan. SSL diperlukan oleh server, tetapi Anda tidak menyiapkannya. Fungsi Anda berjalan maksimal pada pengaturan Batas Memori Server Anda.

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "ftp.site.com/link.csv"); 
//make sure your path to file is correct
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
//make sure your login credentials correct
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
//Set timeout for connection
    curl_exec($curl);
    echo curl_errno($ch);
    echo curl_error($ch);
//Get errors
    curl_close($curl);
//Importand close curl connection.
person Dlk    schedule 26.01.2020
comment
@HaqNawaz perbarui pertanyaan dan tunjukkan apa yang Anda lakukan - person Dlk; 26.01.2020
comment
Saya menjalankan kode yang sama di localhost yang berfungsi dan mengumpulkan data tetapi di server tidak berfungsi meskipun tidak menunjukkan kesalahan apa pun, dan saya telah mengaktifkan pelaporan kesalahan dan meningkatkan waktu eksekusi tetapi tidak ada yang muncul. - person Haq Nawaz; 26.01.2020
comment
Localhost dan server langsung bekerja secara berbeda, 1 di antaranya adalah SSL localhost tidak memerlukan, tetapi server langsung memerlukannya, CURLOPT_RETURNTRANSFER harus diaktifkan saat langsung tetapi tidak diperlukan di lokal, header http mungkin diperlukan di server langsung, ada banyak hal yang saya bisa katakan, jadi kamu ingin membuatnya berhasil? edit pertanyaan Anda dan tambahkan kode terbaru yang Anda coba. dan gunakan contoh dalam pertanyaan saya ini berfungsi dengan baik. Saya mengujinya secara pribadi. dan tambahkan yang lain langkah demi langkah, sehingga Anda dapat menemukan apa yang salah, kami tidak dapat menebak pengaturan dan kode Anda jika Anda tidak menunjukkan kepada kami dan tidak mencoba apa yang kami katakan. - person Dlk; 26.01.2020
comment
Saya membuat perubahan dan itu memberi saya kesalahan 28 - person Haq Nawaz; 27.01.2020
comment
@HaqNawaz Setidaknya bagus menunjukkan sesuatu kepada kita. Anda harus mencoba kode saya, kesalahan berarti koneksi habis, jadi, 1.tempelkan curl_close($ch); ini di bawah $curl error_no dan hapus exit; dalam kode Anda, mungkin ikal Anda berfungsi tanpa batas. 2.Tetapkan waktu istirahat curl_setopt($ch, CURLOPT_TIMEOUT, 500);. 3. Terkadang header juga menyebabkan masalah tersebut, jadi, ubah header menjadi false dan lihat hasilnya jika menyebabkan masalah. Saya memperbarui jawaban saya, menambahkan batas waktu. dan silakan tambahkan kode terbaru yang Anda coba dan dapatkan kesalahan 28. - person Dlk; 27.01.2020
comment
Terima kasih telah menjawab, saya menghargainya. Saya juga menambah batas waktu menjadi 500 tetapi kemudian tidak menunjukkan apa pun curl_setopt($curl, CURLOPT_TIMEOUT, 500); - person Haq Nawaz; 27.01.2020
comment
@HaqNawaz coba kode kedua sebagai jawaban karena tidak mengubah apa pun, cukup masukkan jalur ke file Anda dan info login Anda, dan lihat apakah berhasil. - person Dlk; 27.01.2020