יש לי כאן קוד שאמור לעלות קובץ php גדול ומשום מה זה מעלה רק חלק קטן ממנו (באמצע) ובלי שום תגובה מישהו יכול לעזור?
<?php
// הגדרות קבועות (חובה לעדכן)
$API_BASE_URL = "https://www.call2all.co.il/ym/api/";
$TOKEN = ""; // טוקן הגישה
$REMOTE_FILE_URL = "-כאן צריך להשים את הכתובת (בכוונה שיניתי( "; // כתובת הקובץ המקורית
$TARGET_PATH = "ivr2:/200/uploaded_file.mp3"; // נתיב היעד (חובה ivr2:) [3, 4]
$MAX_FILE_SIZE_MB = 150; // הגבלה לגודל הקובץ
$CHUNK_SIZE = 5 * 1024 * 1024; // 5MB למקטע (קטן מ-50MB המגבלה המקסימלית) [3, 4]
// הגדרות קובץ מקומיות
$QQUUID = uniqid('', true); // מזהה ID רנדומלי שיש ליצור לפני הבקשה הראשונה [5, 7]
$TEMP_DIR = 'temp_uploads/';
$TEMP_FILE_PATH = $TEMP_DIR . basename($TARGET_PATH);
$MAX_FILE_SIZE_BYTES = $MAX_FILE_SIZE_MB * 1024 * 1024;
// פונקציית שליחת בקשת cURL (מותאם לשיטת POST multipart/form-data)
function send_curl_request($url, $fields, $is_done_request = false) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (!$is_done_request) {
// שלב א': העלאת מקטע
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
}
// שלב ב': בקשת חיבור (UploadFile?done) היא לרוב GET או POST עם פרמטרים ב-URL,
// כאן נשתמש ב-GET אם הפרמטרים כבר ב-URL
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code != 200) {
throw new Exception("HTTP Error {$http_code} | Response: " . $response);
}
return json_decode($response, true);
}
// 1. הורדת קובץ חיצונית ושמירה מקומית + בדיקת גודל
if (!is_dir($TEMP_DIR)) {
mkdir($TEMP_DIR, 0777, true);
}
if (!@file_put_contents($TEMP_FILE_PATH, @file_get_contents($REMOTE_FILE_URL))) {
die("שגיאה בהורדה או שמירה מקומית של הקובץ.");
}
$file_size = filesize($TEMP_FILE_PATH);
$file_name = basename($TEMP_FILE_PATH);
if ($file_size > $MAX_FILE_SIZE_BYTES) {
unlink($TEMP_FILE_PATH);
die("הקובץ גדול מהמגבלה המוגדרת.");
}
// חישוב מקטעים
$total_parts = ceil($file_size / $CHUNK_SIZE);
$qq_total_parts_api = $total_parts + 1; // כולל בקשת החיבור (done) [5-8]
// --------------------------------------------------
// שלב א': העלאת מקטעי הקובץ (Chunks)
// --------------------------------------------------
$handle = fopen($TEMP_FILE_PATH, "r");
$chunk_index = 0;
$byte_offset = 0;
$upload_success = true;
if ($handle) {
while (!feof($handle)) {
$chunk_data = fread($handle, $CHUNK_SIZE);
$current_chunk_size = strlen($chunk_data);
if ($current_chunk_size == 0) {
break;
}
// יצירת קובץ זמני עבור המקטע הנוכחי (דרוש עבור cURL)
$temp_chunk_file = $TEMP_DIR . "chunk_{$chunk_index}";
file_put_contents($temp_chunk_file, $chunk_data);
// פרמטרים הנדרשים לבקשת העלאת מקטע [5, 7]
$post_fields = [
'token' => $TOKEN,
'path' => $TARGET_PATH,
'qquuid' => $QQUUID,
'qqpartindex' => $chunk_index,
'qqpartbyteoffset' => $byte_offset,
'qqchunksize' => $current_chunk_size,
'qqtotalparts' => $qq_total_parts_api,
'qqtotalfilesize' => $file_size,
'qqfilename' => $file_name,
'qqfile' => new CURLFile($temp_chunk_file, mime_content_type($temp_chunk_file), $file_name) // העלאת המקטע הנוכחי
// ניתן להוסיף convertAudio, autoNumbering ו-tts כאן אם צריך [3-5, 7]
];
try {
$response = send_curl_request($API_BASE_URL . 'UploadFile', $post_fields);
if ($response['responseStatus'] !== 'OK') {
$upload_success = false;
break;
}
} catch (Exception $e) {
$upload_success = false;
break;
}
// מחיקת קובץ המקטע הזמני
unlink($temp_chunk_file);
$chunk_index++;
$byte_offset += $current_chunk_size;
}
fclose($handle);
} else {
die("שגיאה: לא ניתן לקרוא את הקובץ המקומי.");
}
// --------------------------------------------------
// שלב ב': סיום העלאה ובקשת חיבור לקבצים
// --------------------------------------------------
if ($upload_success) {
// פרמטרים הנדרשים לבקשת החיבור [6, 8]
$done_params = [
'token' => $TOKEN,
'path' => $TARGET_PATH,
'qquuid' => $QQUUID,
'qqfilename' => $file_name,
'qqtotalfilesize' => $file_size,
'qqtotalparts' => $qq_total_parts_api,
// אם הועברו convertAudio, autoNumbering, tts יש לצרף גם לכאן [6, 8]
];
$query_string = http_build_query($done_params);
$done_url = $API_BASE_URL . "UploadFile?done&" . $query_string;
try {
// שליחת בקשה לחיבור הקטעים (UploadFile?done)
$response_data = send_curl_request($done_url, null, true);
if (isset($response_data['responseStatus']) && $response_data['responseStatus'] === 'OK') {
// פעולת ה-API הושלמה בהצלחה
// תוצאה: $response_data מכילה path ו-size [9, 10]
} else {
// שגיאה בחיבור הקבצים
}
} catch (Exception $e) {
// שגיאה בבקשת החיבור
}
} else {
// העלאת המקטעים נכשלה
}
// ניקוי הקובץ הזמני בשרת המקומי שלך
if (file_exists($TEMP_FILE_PATH)) {
unlink($TEMP_FILE_PATH);
}
?>