• הרשמה
    • התחברות
    • חיפוש
    • דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • קבלת התראות מהדפדפן
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private

    עזרה בקוד

    פורום PHP
    2
    5
    26
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • 1
      121244 נערך לאחרונה על ידי

      יש לי כאן קוד שאמור לעלות קובץ 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);
      }
      ?>
      
      ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • ע
        עידו @121244 נערך לאחרונה על ידי

        @121244 כתב בעזרה בקוד:

        יש לי כאן קוד שאמור לעלות קובץ 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);
        }
        ?>
        

        לא מבין בזה, אבל הgpt אומר שיש כמה טעויות.

        1 תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • 1
          121244 @עידו נערך לאחרונה על ידי

          @עידו לא עברתי על הכל אבל כבר ראיתי כמה קשקושים

          ע 2 תגובות תגובה אחרונה תגובה ציטוט 0
          • ע
            עידו @121244 נערך לאחרונה על ידי

            @121244 בד"כ הוא לא מקשקש אם מביאים לו תיעוד מלא כמו שהבאתי. אבל אם אתה מבין בזה וראית קשקושים, אז לא אתווכח.

            תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • ע
              עידו @121244 נערך לאחרונה על ידי

              @121244 תנסה לבקש קוד תקין ותראה מה יתן, מה יש להפסיד?

              תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • פוסט ראשון
                פוסט אחרון