
Kata Pengantar
Saya tidak memikirkan hal ini sebelumnya dan menggunakan solusi yang sudah jadi seperti Drupal untuk mengunggah file, dan saya tidak perlu lagi. Sampai beberapa bulan yang lalu saya memiliki kebutuhan mendesak tidak hanya untuk memberikan file.
Ada banyak informasi di Internet tentang cara mengunduh file dari server dan mengunggah file ke server, serta antar server. Tetapi tidak ada solusi sederhana yang akan lebih atau kurang universal.
Saya membunuh beberapa hari untuk mempelajari semua jenis header dan variasi penggunaan cUrl, tetapi menyatukan semuanya tidak berhasil. Saya melihat banyak kelas serupa yang berbeda, tetapi di mana-mana ada solusi parsial, atau sangat membingungkan, atau keduanya.
Dan hanya berkat artikel tunggal, potongan-potongan informasi dari forum dan segala macam komentar, kami berhasil menyusun puzzle. Saya tidak mengklaim bahwa solusi saya sepenuhnya universal, tetapi sangat nyaman dalam banyak kasus, meskipun terserah Anda.
Jika ada yang memiliki keinginan untuk meningkatkan solusi saya untuk masalah ini dan tidak memiliki pengetahuan dalam arah ini, maka saya akan senang jika Anda membuat perbaikan atau penambahan pada kode yang tersedia untuk umum di GitHub .
Dan sekarang to the point, fungsi dari kelas CargaDes:
- Unggah file melalui browser tanpa menunjukkan lokasi penyimpanannya dan dengan kemungkinan melanjutkan kembali;
- Mengunggah file ke server melalui browser dengan indikator kemajuan;
- Mengunduh file dari server jarak jauh ke server Anda dengan indikator kemajuan;
- Unggah file dari server Anda ke server jarak jauh dengan indikator kemajuan.
Pertama, Anda perlu mengunduh dan menghubungkan kelas CargaDes:
1. Unggah file melalui browser tanpa menunjukkan lokasi penyimpanannya dengan kemampuan untuk melanjutkan dan mengontrol kecepatan
$realFilePath = dirname( __FILE__ ) . '/file.zip';
Metode ini sangat mirip dengan Drupal dan sejenisnya:
$CargaDes = new CargaDes; $client_d = new ClientD($realFilePath);
Saya menambahkan lebih banyak kickback dengan Apache, tetapi direktif XSendFile On harus diaktifkan
$client_d->apache = false;
Segera setelah menjalankan metode, browser akan menampilkan jendela untuk menyimpan file
2. Unggah file ke server melalui browser dengan indikator kemajuan
$url_server = "http://_.com/upload.php";
Setelah metode ini dijalankan, tombol untuk memilih file dan tombol untuk mengunduh file akan muncul. Indikator akan muncul untuk setiap file yang dipilih secara individual.

3. Mengunduh file dari server jarak jauh ke server Anda
$CargaDes = new CargaDes; $server = new Server();
4. Kami memberikan file ke server jauh dari server kami
$CargaDes = new CargaDes; $server = new Server();
Sebagai hasilnya, saya ingin mengatakan
Jika kelas ini membantu setidaknya satu orang, saya akan sangat senang karenanya. Seperti yang saya katakan di awal, saya akan dengan senang hati memberikan kritik dan tambahan yang membangun yang dapat meningkatkan kelas. Tautan ke CargaDes.class .
Mengubah metode penggunaan kelas dalam artikel. Dan dia menambahkan deskripsi tentang apa yang telah berubah di kelas.
Itu selesai bekerja pada kesalahan, kalau boleh saya sebut itu.
Apa yang telah dilakukan:
- Dia membawa kode ke satu gaya menggunakan PHPSTORM dan mencoba untuk mematuhi PSR;
- Menghapus garis bawah dari nama fungsi;
- Benar-benar dikecualikan jQuery;
- Menghapus semua metode statis;
- Dibuat kelas sebagai paket komposer;
- cUrl membuat alas kaki dengan metode terpisah;
- Saya mencoba untuk mematuhi SRP;
- Membuat pengecualian dan sedikit mengubah output kesalahan;
- Memperbaiki badan konstruktor;
- Mencoba untuk memperbaiki konstruksi if-else;
- Mengambil js dan html di luar kelas;
- Menghapus tag penutup?>;
- Menambahkan kemampuan untuk menerjemahkan pesan;
- Menambahkan folder dengan contoh yang dapat dieksekusi.
Apa yang belum dilakukan:
- Terjemahan komentar ke dalam bahasa Inggris (jika semua ini tidak perlu bagi siapa pun, lalu mengapa membuang waktu);
- Saya tidak mengubah nama fungsi menjadi yang lebih mudah dimengerti (tidak jelas bagi saya yang, jika bahasa Inggris, lihat pada titik N1);
- Saya menonton autotests, tapi sangat bagus. sulit dilakukan secara universal sejak itu masing-masing memiliki skenario tindakannya sendiri, meskipun mungkin saya salah, maka jika Anda menganggapnya perlu di kelas yang tidak diperlukan, Anda memiliki kesempatan untuk membantu saya dalam hal ini;
- Sesuatu yang lain adalah mungkin, tetapi saya belum tahu apa yang Anda punya kesempatan untuk katakan kepada saya tentang hal itu.
Secara umum, saya mencoba memperbaikinya, apa yang dikatakan dalam komentar, jika ada kekurangan atau kesalahan lain ditemukan - tulis, saya akan mencoba memperbaikinya.
Terima kasih atas kritik konstruktif dari webdevium dan alutskevich , jika saya bisa, maka saya pasti akan plus Anda.
Saya juga berterima kasih kepada semua orang karena Saya memahami kesalahan utama saya dan lahirlah beberapa ide.