ما مشكلة ذهو الاخطاء عند فك ضغط ملف zip في الاصدار الثامن من لغة php

لقد قمت باستخدام الكود التالي لفك ضغط ملف zip

<?php
$zip = new ZipArchive;
if ($zip->open('chat-master.zip') === TRUE) {
  $zip->extractTo('zip');
  $zip->close();
  echo 'ok';
} else {
  echo 'failed';
}
?>

ويعمل جيدا مع الاصدار السابع من لغة php ولكن عندما استخدم الكود مع الاصدار الثامن يشتغل الكود ويفك الضغط ولكن مع ظهور هذه الاخطاء

Warning: ZipArchive::extractTo(zip/chat-master/.github/FUNDING.yml): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/LICENSE): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/README.md): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/chat.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/conn.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/counter.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/db/chat.sql): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/db/counter.sql): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/db/users.sql): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/index.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/login/delete.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/login/index.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/login/logout.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/login/user.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/script.js): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/chat/style.css): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

Warning: ZipArchive::extractTo(zip/chat-master/index.php): Operation failed: Operation not permitted in /storage/emulated/0/htdocs2/images/zip.php on line 4

ماهي المشكلة وكيف احلها

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

في الإصدار 8 كلاس ZipArchive أصبح يشدد أكثر على صلاحيات ومالكي الملفات، وعند فك ضغط ملفات من أرشيف ZIP، تقوم الفئة بفحص هل المجلد الوجهة (المجلد الذي سيتم فك ضغط الملفات فيه) يمتلك الصلاحيات والملكية الصحيحة، وإن لم يكن الأمر كذلك، فتُصدر تحذيرًا أو خطأ.

والتحذيرات لديك تعني أنّ ميثود extractTo فشلت لأن العملية غير مسموح بها، وذلك على الأرجح بسبب عدم امتلاك الصلاحيات اللازمة للكتابة في المجلد الوجهة zip.

حاول تغيير صلاحية الدليل zip لتمكين الكتابة فيه باستخدام الأمر chmod في حال النظام لديك هو لينكس.

chmod -R 777 zip

أو افتح مجلد zip باستخدام مدير الملفات وانقر بزر الماوس الأيمن على المجلد واختر خصائص أو Properties.

ثم انتقل إلى علامة التبويب أذونات أو Permissions وتأكد من أن لدى مستخدم PHP (عادةً www-data أو apache) صلاحيات القراءة والكتابة والتنفيذ.

هذه ليست أخطاء بل تحذيرات أنه لم يتم السماح بإستخراج الملف حيث ليس لك الصلاحية المناسبة لذلك ويبدوا أن المشكلة بسبب عدم إمتلاك الصلاحيات أو أن المجلد zip ليس فارغا لهذا لا يستطيع الكتابة على الملفات الموجودة وإعادة إستخراجها.

وبما أنك تقول أنه يتم الإستخراج بشكل صحيح فيبدوا أنه السبب الثاني حيث أعتقد أن الكود يتم تنفيذه مرتين وتحدث تلك المشكلة .

لذلك أولا لنحل مشكلة الصلاحيات :

يرجى إستخدام الأمر التالي لتغير صلاحيات مجلد zip لديك حتي تستطيع القراءة والكتابة بشكل صحيح:

chmod -R 777 zip

ويجب أن تكون في نفس مسار المجلد أو تقوم بكتابة المسار كاملا في الأمر السابق .

بعد ذلك يرجى تنفيذ الأمر التالي لتغير صلاحية الملف chat-master.zip للصلاحية المناسبة كالتالي :

chmod 644 chat-master.zip

إذا ظهرت المشكلة مرة أخرى فأعتقد كما أخبرتك أنك تقوم بتنفيذ الكود مع وجود ملفات في المجلد zip.

انا استخدم هاتف اندرويد ولا يوجد طريقه لتغيير الصلاحيه، هل يمكن تغيير الصلاحه من دالة chmod في php

على أجهزة أندرويد لا توجد عادة طريقة مباشرة لتغيير الصلاحيات باستخدام أوامر chmod كما في الأنظمة المستندة إلى Linux، إلا إذا كان لديك وصول إلى جذر النظام، في هذه الحالة يمكنك تجربة استخدام الدالة chmod في PHP لتغيير الصلاحيات على الملفات والمجلدات، طالما أن السيرفر لديه الصلاحيات اللازمة بهذا الشكل:

<?php
$file = 'chat-master.zip';
if (file_exists($file)) {
    chmod($file, 0644);
}
?>

و أيضا تأكد من أن لديك وصولا إلى السيرفر وأنه يسمح بتشغيل chmod من خلال PHP.

ومافائدة هذه الصلاحيات اذا كنت انا صاحب المرقع لا اقدر ان اغيرها

انا استخدم هاتف اندرويد ولا يوجد طريقه لتغيير الصلاحيه، هل يمكن تغيير الصلاحه من دالة chmod في php