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

    גיבוי המערכת שלכם במחשב האישי בלחיצת כפתור!!!

    מתוזמן נעוץ נעול הועבר עזרה הדדית למשתמשים מתקדמים
    35 פוסטים 9 כותבים 385 צפיות 5 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • א מנותק
      אA @isi
      נערך לאחרונה על ידי אA

      @isi
      טוב.
      אז בבעיה של הסריקה של שלוחות 00 ומעלה טיפלתי וגם בקובץ ההגדרות בשלוחה הראשית.
      הבעיה בקבצי הini היא שבימות לא מוגדר שיסרוק את כל הקבצים בסיומת הזו חוץ מקובץ ההגדרות.
      הברירה היחידה היא ליצור מאגר של קבצי הini במערכות של ימות ולהריץ על כולם סריקה.
      אני אנסה להכניס כמה שיותר אבל אצטרך לעזרה.
      אז כל מי שיכלו לעדכן כמה שיותר קבצי ini שהוא זוכר שאוכל לעדכן כמה שיותר.

      I תגובה 1 תגובה אחרונה תגובה ציטוט 1
      • א מנותק
        אA
        נערך לאחרונה על ידי

        אני רוצה לשפר את האפשרות הזו של גיבוי המערכת למשהו גדול יותר שיעזור לבעלי המערכות.
        לצורך כך אני מעוניין להשתמש גם בסקריפט מסויים.
        אך העניין הוא שאני משתמש בנטפרי והם חוסמים את הסקריפטים ולא פותחים ללא צורך אמיתי.
        אשמח אם יש מי שיוכל לעזור לי בבחינת הסקריפט ובהרצה שלו או לחילופין (וכך עדיף) לשלוח לנטפרי בקשה לפתוח את הסקריפט.
        אשמח לעזרה מכל מי שיוכל.

        תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • I מנותק
          isi @אA
          נערך לאחרונה על ידי

          @אA כתב בגיבוי המערכת שלכם במחשב האישי בלחיצת כפתור!!!:

          @isi
          טוב.
          אז בבעיה של הסריקה של שלוחות 00 ומעלה טיפלתי וגם בקובץ ההגדרות בשלוחה הראשית.
          הבעיה בקבצי הini היא שבימות לא מוגדר שיסרוק את כל הקבצים בסיומת הזו חוץ מקובץ ההגדרות.
          הברירה היחידה היא ליצור מאגר של קבצי הini במערכות של ימות ולהריץ על כולם סריקה.
          אני אנסה להכניס כמה שיותר אבל אצטרך לעזרה.
          אז כל מי שיכלו לעדכן כמה שיותר קבצי ini שהוא זוכר שאוכל לעדכן כמה שיותר.

          אני משתמש ב:
          EnterIDValName
          WhitelList
          BlackList

          אז בבעיה של הסריקה של שלוחות 00 ומעלה טיפלתי וגם בקובץ ההגדרות בשלוחה הראשית.

          האם תוכל להעלות את התוכנה המותקנת. ממש תודה מכל הלב!

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

            @isi
            אני ממש עכשיו עושה הרצה אחרונה ומקווה שכל הבאגים סודרו.

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

              גירסא חדשה
              תוקן הבאג שלא קרא גם את שלוחות 00-09 וכן ניתן להוסיף קבצי ini לסריקה בשורה 65 בסוגרים, עושים , 'שם הקובץ' וזהו!

              יש שדרוג שאני רוצה להוסיף, ואשמח אם יש מישהו שיוכל לעזור לי בהרצה של סקריפט לבדיקות או בשליחת בקשה לנטפרי לפתיחת סקריפט לציבור לצורך גיבוי מערכות בימות המשיח.

              הקוד

              <!DOCTYPE html>
              <html lang="he" dir="rtl">
              <head>
                  <meta charset="UTF-8">
                  <title>גיבוי מערכות בימות המשיח  INI</title>
                  <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
                  <style>
                      body { font-family: 'Segoe UI', Tahoma, sans-serif; margin: 20px; background-color: #f4f7f6; text-align: right; direction: rtl; }
                      .container { max-width: 1100px; margin: auto; background: white; padding: 25px; border-radius: 12px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
                      .section { border: 1px solid #e0e0e0; padding: 15px; margin-bottom: 15px; border-radius: 8px; background: #fafafa; }
                      #logArea { background: #1e1e1e; color: #d4d4d4; padding: 15px; border-radius: 5px; height: 250px; overflow-y: auto; font-family: 'Consolas', monospace; font-size: 13px; margin-top: 10px; }
                      .log-info { color: #4fc3f7; }
                      .log-success { color: #00ff00; font-weight: bold; }
                      .log-error { color: #ff5252; }
                      button { padding: 10px 20px; background: #3498db; color: white; border: none; cursor: pointer; border-radius: 5px; font-weight: bold; }
                      button:disabled { background: #bdc3c7; }
                      input { padding: 10px; margin: 5px; border: 1px solid #ccc; border-radius: 4px; }
                      .progress-container { background: #e0e0e0; border-radius: 20px; height: 25px; margin: 15px 0; overflow: hidden; display: none; }
                      .progress-bar { width: 0%; height: 100%; background: linear-gradient(90deg, #3498db, #2ecc71); transition: width 0.1s; color: white; text-align: center; line-height: 25px; font-weight: bold; }
                      table { width: 100%; border-collapse: collapse; margin-top: 15px; }
                      th, td { border: 1px solid #ddd; padding: 10px; text-align: right; }
                  </style>
              </head>
              <body>
              
              <div class="container">
                  <h2>גיבוי מערכות בימות המשיח</h2>
                  
                  <div class="section">
                      <strong>⚙️ הגדרות:</strong>
                      כמות ספרות מקסימלית: <input type="number" id="digitCount" style="width:50px;" value="2">
                      שם קובץ ZIP: <input type="text" id="fileNameInput" value="full_system_backup">
                  </div>
              
                  <div class="section">
                      <strong>1. סריקה</strong><br>
                      טוקן: <input type="text" id="srcToken" style="width:300px;" placeholder="הכנס טוקן כאן...">
                      נתיב התחלה: <input type="text" id="srcPath" style="width:100px;" value="/">
                      <button onclick="loadInitialList()">טען רשימת קבצים</button>
                  </div>
              
                  <div class="section">
                      <strong>2. הורדת הקבצים</strong><br>
                      <div id="statsBar" style="font-weight:bold; margin-bottom:5px;">ממתין לפעולה...</div>
                      <div class="progress-container" id="progContainer">
                          <div id="progBar" class="progress-bar">0%</div>
                      </div>
                      <button id="downloadBtn" onclick="startDeepDownload()" disabled style="background:#27ae60;">בחר מיקום והורד גיבוי</button>
                      <div id="logArea">מוכן לסריקה...</div>
                  </div>
              
                  <div id="fileArea" style="display:none;">
                      <table>
                          <thead>
                              <tr style="background:#eee">
                                  <th style="width: 40px;"><input type="checkbox" id="masterCheck" checked onclick="toggleAll(this)"></th>
                                  <th>סוג</th>
                                  <th>שם</th>
                              </tr>
                          </thead>
                          <tbody id="fileTableBody"></tbody>
                      </table>
                  </div>
              </div>
              
              <script>
              const INI_FILES = ['ext', 'ivr', 'EnterIDValName', 'EnterIDBlock', 'WhitelList', 'BlackList'];
              let totalBytes = 0;
              let startTime = 0;
              
              function addLog(msg, type = '') {
                  const logArea = document.getElementById('logArea');
                  const div = document.createElement('div');
                  div.className = `log-${type}`;
                  div.innerHTML = `[${new Date().toLocaleTimeString()}] ${msg}`;
                  logArea.appendChild(div);
                  logArea.scrollTop = logArea.scrollHeight;
              }
              
              function updateProgress(percent, text) {
                  const container = document.getElementById('progContainer');
                  const bar = document.getElementById('progBar');
                  container.style.display = 'block';
                  bar.style.width = percent + '%';
                  bar.innerText = text ? `${text} (${percent}%)` : `${percent}%`;
              }
              
              async function checkItemExists(token, path, name) {
                  const fullPath = (path + '/' + name).replace(/\/+/g, '/');
                  try {
                      const dRes = await fetch(`https://www.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${fullPath}`);
                      const dData = await dRes.json();
                      if (dData.responseStatus === "OK") return { name, type: "DIR" };
              
                      const fRes = await fetch(`https://www.call2all.co.il/ym/api/GetTextFile?token=${token}&what=ivr2:${fullPath}.ini`);
                      const fData = await fRes.json();
                      if (fData.contents !== undefined) return { name: name + ".ini", type: "FILE" };
                  } catch (e) {}
                  return null;
              }
              
              async function loadInitialList() {
                  const token = document.getElementById('srcToken').value.trim();
                  const path = document.getElementById('srcPath').value.trim();
                  const digits = parseInt(document.getElementById('digitCount').value) || 2;
                  if (!token) { alert("נא להזין טוקן"); return; }
                  
                  addLog(`מתחיל סריקה: ${path}`, "info");
                  const tbody = document.getElementById('fileTableBody');
                  tbody.innerHTML = '';
                  
                  const res = await fetch(`https://www.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${path}`);
                  const data = await res.json();
                  let foundMap = new Map();
                  if (data.files) data.files.forEach(f => foundMap.set(f.name, f));
              
                  // 1. סריקת קבצי INI בתיקיית השורש שנבחרה (חדש!)
                  for (let ini of INI_FILES) {
                      let iniName = ini + ".ini";
                      if (!foundMap.has(iniName)) {
                          let found = await checkItemExists(token, path, ini);
                          if (found) foundMap.set(found.name, { name: found.name, fileType: found.type });
                      }
                  }
              
                  // 2. ניחוש שלוחות חבויות
                  const max = Math.pow(10, digits);
                  for (let i = 0; i < max; i++) {
                      let n = i.toString();
                      let candidates = new Set([n]);
                      for (let d = 1; d <= digits; d++) candidates.add(n.padStart(d, '0'));
              
                      for (let cand of candidates) {
                          if (!foundMap.has(cand) && !foundMap.has(cand + ".ini")) {
                              let found = await checkItemExists(token, path, cand);
                              if (found) foundMap.set(found.name, { name: found.name, fileType: found.type });
                          }
                      }
                      if (i % 10 === 0) updateProgress(Math.round((i/max)*100), "סורק:");
                  }
              
                  const sorted = Array.from(foundMap.values()).sort((a,b) => a.name.localeCompare(b.name, undefined, {numeric: true}));
                  sorted.forEach(f => {
                      tbody.insertAdjacentHTML('beforeend', `<tr><td><input type="checkbox" class="file-check" data-name="${f.name}" data-type="${f.fileType}" checked></td><td>${f.fileType === "DIR" ? "שלוחה" : "קובץ"}</td><td>${f.name}</td></tr>`);
                  });
              
                  document.getElementById('fileArea').style.display = 'block';
                  document.getElementById('downloadBtn').disabled = false;
                  updateProgress(100, "סריקה הושלמה");
              }
              
              async function processDeep(token, path, name, type, zipFolder) {
                  const fullPath = (path + '/' + name).replace(/\/+/g, '/');
                  const digits = parseInt(document.getElementById('digitCount').value) || 2;
              
                  if (type === "DIR") {
                      addLog(`סורק שלוחה: ${fullPath}`, "info");
                      const currentFolder = zipFolder.folder(name);
                      
                      const res = await fetch(`https://www.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${fullPath}`);
                      const data = await res.json();
                      let children = data.files || [];
                      let namesSet = new Set(children.map(c => c.name));
              
                      // ניחוש חבויים בתוך השלוחה
                      for (let i = 0; i < Math.pow(10, digits); i++) {
                          let n = i.toString();
                          let candidates = new Set([n]);
                          for (let d = 1; d <= digits; d++) candidates.add(n.padStart(d, '0'));
                          for (let cand of candidates) {
                              if (!namesSet.has(cand) && !namesSet.has(cand + ".ini")) {
                                  let found = await checkItemExists(token, fullPath, cand);
                                  if (found) {
                                      children.push({ name: found.name, fileType: found.type });
                                      namesSet.add(found.name);
                                  }
                              }
                          }
                      }
              
                      // בדיקת קבצי INI בתוך השלוחה
                      for (let ini of INI_FILES) {
                          let iniName = ini + ".ini";
                          if (!namesSet.has(iniName)) {
                              let found = await checkItemExists(token, fullPath, ini);
                              if (found) children.push({ name: found.name, fileType: found.type });
                          }
                      }
              
                      for (let child of children) {
                          await processDeep(token, fullPath, child.name, child.fileType, currentFolder);
                      }
                  } else {
                      try {
                          const res = await fetch(`https://www.call2all.co.il/ym/api/DownloadFile?token=${token}&path=ivr2:${fullPath}`);
                          const blob = await res.blob();
                          
                          totalBytes += blob.size;
                          const elapsed = (Date.now() - startTime) / 1000 || 1;
                          const speed = (totalBytes / 1024 / elapsed).toFixed(2);
                          document.getElementById('statsBar').innerText = `מהירות: ${speed} KB/s | סה"כ: ${(totalBytes/1024/1024).toFixed(2)} MB`;
                          
                          zipFolder.file(name.endsWith('.ini') ? name + ".txt" : name, blob);
                      } catch (e) { addLog(`שגיאה בהורדת ${fullPath}`, "error"); }
                  }
              }
              
              async function startDeepDownload() {
                  const token = document.getElementById('srcToken').value.trim();
                  const basePath = document.getElementById('srcPath').value.trim();
                  const selected = Array.from(document.querySelectorAll('.file-check:checked'));
                  if (selected.length === 0) return;
              
                  let fileHandle;
                  try {
                      fileHandle = await window.showSaveFilePicker({
                          suggestedName: document.getElementById('fileNameInput').value + ".zip",
                          types: [{ description: 'ZIP file', accept: {'application/zip': ['.zip']} }]
                      });
                  } catch (e) { return; }
              
                  const zip = new JSZip();
                  document.getElementById('downloadBtn').disabled = true;
                  totalBytes = 0;
                  startTime = Date.now();
              
                  for (let i = 0; i < selected.length; i++) {
                      updateProgress(Math.round((i / selected.length) * 100), "מוריד קבצים...");
                      const currentBasePath = basePath === '/' ? '' : basePath;
                      await processDeep(token, currentBasePath, selected[i].dataset.name, selected[i].dataset.type, zip);
                  }
              
                  addLog("סוגר קובץ ZIP...", "success");
                  const content = await zip.generateAsync({ type: "blob" });
                  const writable = await fileHandle.createWritable();
                  await writable.write(content);
                  await writable.close();
              
                  updateProgress(100, "הושלם!");
                  addLog("✅ הגיבוי הסתיים בהצלחה!", "success");
                  document.getElementById('downloadBtn').disabled = false;
              }
              
              function toggleAll(source) {
                  document.querySelectorAll('.file-check').forEach(cb => cb.checked = source.checked);
              }
              </script>
              </body>
              </html>
              
              א I 2 תגובות תגובה אחרונה תגובה ציטוט 1
              • א מנותק
                אA @אA
                נערך לאחרונה על ידי

                @ivrפון
                העלתי גירסא חדשה ומתוקנת

                R תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • R מנותק
                  R.E.T מערכות @אA
                  נערך לאחרונה על ידי

                  @אA
                  מה חדש ונוסף בזה?

                  א תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • א מנותק
                    אA @R.E.T מערכות
                    נערך לאחרונה על ידי

                    @R.E.T-מערכות
                    הוספתי פירוט מעל הקוד.

                    תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • א מנותק
                      אA
                      נערך לאחרונה על ידי

                      אני מעלה תוכנה שיוצרת תוכנות מקבצי html.
                      אפשר לקחת את כל קבצי הhtml שבפורום להכניס לתוכנה והיא אורזת אותם לתוכנה ניידת.
                      בהצלחה!
                      בונה_התוכנות.zip

                      תגובה 1 תגובה אחרונה תגובה ציטוט 1
                      • I מנותק
                        isi @אA
                        נערך לאחרונה על ידי

                        @אA נראה שזה עובד מצוין.
                        תודה רבה גדולה!!!

                        רק אציין שאת כל קבצי ה INI הוא לא מוריד כקובץ INI אלא כקובץ TXT.

                        למשל את הקובץ EnterIDValName.ini הוא יוריד כשם מלא ויוסיף לו סיומת txt ואז שם הקובץ יראה: EnterIDValName.ini.txt

                        לא נורא, כי אחרי הכל זה לגיבוי.
                        אבל אם זה דבר שניתן לסידור בקלות, אז יכול להיות שכדאי לסדר לעתיד.

                        ושוב, תודה רבה!!!

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