كارثة التحديث إلى ووردبريس 2.5.1 ومشكلة الـ UTF8
وعدتكم في موضوعي السابق أن أدون تجربتي مع تحديث برنامج الووردبريس إلى الإصدار الجديد 2.5.1 والمشاكل التي رافقت العملية وكيف تم تخطيها.
لن أقوم بذكر جميع المحاولات التي بائت بالفشل حيث أكتشفت في النهاية أنه يوجد حل جذري للمشكلة وللعديد من المشاكل التي يشتكي منها مستخدمي برنامج ووردبريس.
في البداية كان الإصدار الذي أستخدمه هو 2.2.3 وعندما بدأت بعملية الترقية وجدت أنه تم إطلاق 3 إصدارات جديدة 2.3.3 و 2.5 و 2.5.1 وطبعا قمت بتحميل النسخة الأخيرة وأتبعت خطوات الترقية المرفقة معها بعد تعطيل جميع الإضافات وعمل نسخ إحتياطية للملفات والداتابيس وهنا بدأت الكارثة، العديد من الأخطاء ظهرت أثناء محاولة الترقية وبعد الترقية حتى أصبحت غير قادر على إستخدام الووردبريس أو الدخول إلى لوحة التحكم الخاصة به فقمت بحذف جميع ملفات البرنامج من موقعي وقمت برفع النسخة الإحتياطية القديمة و باستعادة قاعدة MySQL وكل شي رجع تمام.
حاولت مرة أخرى الترقية ولكن المرة دي حبة حبة
يعني بدأت الترقية إلى 2.3.3 وبعدها أبدأ بالإصدار إللي بعده وهكذا وكان الأمر مضحك نوعا ما لأنه مع التقدم في الترقية لكل إصدار من الإصدارات الثلاث الأخيرة كانت رسائل الخطأ تزيد في كل مرة حتى وصلت لنفس النتيجة في المحاولة الأولى.
وكانت رسائل الخطأ هي كالتالي
PHP Warning: array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in /htdocs/blog/wp-includes/widgets.php on line 676
PHP Warning: Invalid argument supplied for foreach() in /htdocs/blog/wp-includes/widgets.php on line 676
PHP Warning: array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in /htdocs/blog/wp-includes/widgets.php on line 1337
PHP Warning: Invalid argument supplied for foreach() in /htdocs/blog/wp-includes/widgets.php on line 1337
PHP Warning: Invalid argument supplied for foreach() in /htdocs/blog/wp-includes/capabilities.php on line 31
PHP Warning: Cannot modify header information - headers already sent by (output started at /htdocs/blog/wp-includes/widgets.php:676) in /htdocs/blog/wp-includes/pluggable.php on line 694
PHP Warning: array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in /htdocs/blog/wp-includes/widgets.php on line 1337
PHP Warning: Cannot modify header information - headers already sent by (output started at /htdocs/blog/wp-includes/capabilities.php:31) in /htdocs/blog/wp-includes/pluggable.php on line 557
PHP Warning: Cannot modify header information - headers already sent by (output started at /htdocs/blog/wp-includes/capabilities.php:31) in /htdocs/blog/wp-includes/pluggable.php on line 694
Warning: Invalid argument supplied for foreach() in /htdocs/blog/wp-includes/classes.php on line 88
Warning: Cannot modify header information - headers already sent by (output started at /htdocs/blog/wp-includes/capabilities.php:31) in /htdocs/blog/wp-login.php on line 12
Warning: Cannot modify header information - headers already sent by (output started at /htdocs/blog/wp-includes/capabilities.php:31) in /htdocs/blog/wp-login.php on line 24
Warning: Cannot modify header information - headers already sent by (output started at /htdocs/blog/wp-includes/capabilities.php:31) in /htdocs/blog/wp-includes/pluggable.php on line 391
وهنا بدات أراجع الخطوات إللي أتبعتها في عملية الترقية و تذكرت أني استخدمت ملف الإعدادات الجديد مع إني نادرا ما أستدخم ملف wp-config.php إللي يجي مع النسخ الجديدة بحكم انه راح يكون يؤدي نفس الهدف وهو توفير معلومات الإتصال مع قاعدة البيانات ونوع اللغة وحتى لو دققنا في خطوات الترقية اللي تجي مع النسخة بنلاقيها حذف الملفات القديمة ورفع الملفات الجديدة! طيب ؟؟ ملف wp-config.php الموجود في الموقع راح ينحذف والنسخة الجديدة يجي معاها ملف wp-config-sample.php وهذا الملف لازم نغير اسمه ونرجع نحط فيه الإعدادات من جديد..! أعتقد الخطوات هذه يجب ذكرها في عملية الترقية.
عموما.. رجعت جربت أعمل تحديث من 2.2.3 إلى 2.3.3 ولكن بحذف جميع الملفات القديمة ماعدا ملف wp-config.php ورفعت الملفات الجديدة الأخرى.. يعني استخدمت ملف الإعدادات القديم، وهنا كانت المفاجئة!! ولا خطأ ظهر أثناء العملية .. فقمت بحذف ملف الإعدادات القديم بعد الترقية ووضعت الجديد بداله وحاولت الدخول للمدونة وظهرت نفس الأخطاء في البداية.
وهنا أتى دور السيد Google
بدات البحث بنسخ ولصق الأخطاء إللي ظهرت في محرك البحث وأكتشفت انه الكثييييير يعانوا من نفس المشكلة في جميع أنحاء العالم :-)… أرتحت شوية وقتها لأنو مش معقول العدد هذا كلو ومحد يطلع بحل!! وبدأت بقرائة العديد من المقالات والحورات في مواقع مختلفة لساعات طويييلة إلى وبدون مبالغة أصابني ألم مبرح في عيني اليسار وصداع متواصل وهذه قائمة ببعض الصفحات إللي قرأتها وجربت الحلول إللي فيها إلى درجة التعديل في قاعدة البيانات ولكن أغلبها بائت بالفشل.
http://wordpress.org/support/topic/172272
http://wordpress.org/support/topic/174061
http://wordpress.org/support/topic/122367
http://www.ar-wp.com/showthread.php?t=3094
http://www.terencechang.com/2007/08/09/wordpress-capabilities…error
http://wordpress.org/support/topic/148093
http://climbtothestars.org…/invalid-argument…capabilitiesphp
http://wordpress.org/support/topic/117955
طبعا ماخليت شي إلا جربته بعضها مانجح وبعضها زاد الطينة بلة !! مع الذكر إني حاولت تعطيل مربعات القوائم الجانبية قبل البدء في الترقية لأنه بعض المشاكل كانت بسببها وفعلا أختفت بعض الأخطاء وليست جميعها وأثناء البحث وجدت في الأخير حل هو الأقرب للمنطق وهو تشفير اللغة في قاعدة البيانات لأنه بصراحة من زمان وانا عندي شكوك في التشفير المستخدم في قاعدة البيانات وكانت بدايتها من هذا الموضوع وبعده هذه المشكلة وبصراحة وبدون مبالغة كنت حاسس من تلك الأيام إنو راح يجي يوم تصير فيه عكة بسبب الترميز في قاعدة البيانات للووردبريس ومرت علي فترة أعتقدت فيها إني على خطأ ونسيت الموضوع هذا نهائيا ولكن الماضي يعود غدا في بعض الأحيان
المشكلة ياجماعة بكل بساطة كانت بسبب ترميز UTF-8 وهذا يفسر لما كنت أستخدم ملف الإعدادات القديم يشتغل الووردبريس بدون مشاكل ولما أستخدم الجديد تظهر المشاكل، لأنه الجديد تم فيه تحديد الترميز UTF بينما لم يوجد هذا الخيار في الملف القديم ولذلك مع استخدام الملف الجديد كان الووردبريس يتوقع أن تكون الداتا في قاعدة البيانات UTF أثناء الإتصال بها بينما هي في الأصل Latin1 وهنا بدأت في محاولة تحويل الترميز لقاعدة البيانات وبدأت باتباع الإرشادات الموجودة في الرابط التالي
http://codex.wordpress.org/Converting_Database_Character_Sets
لكن الشغلة بصراحة كانت ملخبطة ومتعبة ولكن توصلت إلى طريقتين وجدتها في الوصلات التي زرتها سابقا.
الأولى هي عبارة عن سكربت php قام ببرمجته أحد المستخدمين للووردبريس وهذا موقعه وإسم السكربت هذا هو convert_to_utf8_sql_generator وطريقة عمله باختصار انه يوفر لك أمر كامل ممكن نستخدمه بواسطة أي سطر أوامر نستخدمه مع الموقع فيه إمكانية الإتصال مع قاعدة البيانات مثل SSH ولتحميل السكربت وخطوات الإستخدام باللغة الإنجليزية الرجاء الضغط على الرابط أدناه.
convert_to_utf8_sql_generator_fahadonline_dot_com
في هذا الملف يوجد السكربت بالإضافة إلى صفحة وجدتها فيها خطوات كاملة وحتى مبرمج الإضافة أدناه يناقش الموضوع قمت بحفظها في الملف لأنه الموقع محجوب في السعودية ولأني قمت بتعديلها وإزالة أغلب السكربتات الضارة إللي فيها ويوجد إختصار للصفحة على الإنترنت أيضا.
الثانية كانت باستخدام إضافة للووردبريس تقوم بعملية التحويل لترميز قاعدة البيانات بضغة واحدة فقط!!
موقع الإضافة: http://g30rg3x.com/utf8-database-converter
الإضافة تدعم الإصدارات الأدنى من 2.3.3 فقط حتى الآن.
من بين الطريقتين السابقة اخترت الطريقة الثانية لسبب انه موقع مبرمج السكربت الأول موقعه فيه مشكلة وطريقة استخدام الطريقة الثانية أسهل بكثير، فقمت باسترجاع الملفات وقاعدة البيانات للنسخة 2.2.3 إلى موقعي وطبعا كان كل شي تمام وأتبعت خطوات تركيب الإضافة كما هي مذكورة في الملف المرفق مع الإضافة عند تحميلها وكانت كالتالي:
1- تحويل الـ DB_CHARSET في ملف الإعدادات إلى utf8
لما فتحت ملف الإعدادات لم أجد فيه خيار الـ DB_CHARSET بحكم انو الملف اللي استخدمه أصلا قديم لأني ماكنت أغيره بالملف الجديد إللي يجي مع النسخ الجديدة فقمت بتحميل الإصدار 2.2.3 من موقع الووردبريس العربي وهو نفس الإصدار إللي كنت أستخدمه وفتحت ملف wp-config.php وفعلا وجدت فيه الخيار DB_CHARSET وقمت بتعديله مع بقية الإعدادات واستبدلته بالملف الموجود في الموقع.
2- رفع ملف الإضافة UTF8_DB_Converter.php إلى مجلد الإضافات للووردبريس.
3- تفعيل الإضافة من لوحة التحكم.
هنا حصلت مشكلة صغيرة لأني لما حاولت الدخول إلى لوحة التحكم للووردبريس كانت تظهر لي نفس الأخطاء أعلاه!! وكان من المستحيل إني استخدم الإضافة أو حتى أفعلها والسبب بكل بساطة اني قمت باستخدام ملف الإعدادات الجديد والذي حددت الترميز فيه إلى utf8 وهذا أساس المشكلة من البداية ولكن مبرمج الإضافة هو إللي كاتب الخطوات أعلاه فما العمل ؟؟
قمت باستعادة ملف الإعدادات القديم الذي لايوجد فيه خيار تعديل الترميز واستبدلته بالملف الموجود في الموقع وبعدها دخلت لوحة التحكم بنجاح وقمت بتفعيل الإضافة!
4- بعد تفعيل الإضافة تظهر لنا قائمة جديدة وهي UTF-8 Database Converter نضغط عليها ونلاقي زر واحد فقط لتحويل قاعدة البيانات .. ضغطت عليه وتم تحويل قاعدة البيانات بنجاح ساااحق
بعد عملية التحويل قمت بتعطيل الإضافة وحذفها وبعدها أسترجعت ملف الإعدادات لنسخة الووردبريس إللي استخدمها وإللي موجود فيه خيار تحديد الترميز وخليته utf8 ورفعته . بعدها جربت الموقع وكان كل شي تمااااااام وقلت خليني أدخل على الـ PhpMyAdmin وأشوف التغييرات إللي حصلت وفعلا دخلت ووجدت انه جميع الجداول اتغير ترميزها إلى utf فقمت بتحميل نسخة من قاعدة البيانات وفتحتها في الجهاز ببرنامج notepad++ وهنا كانت المفاجأة… لأول مرة في حياتي أفتح داتابيس فيها محتوى عربي ويظهر فيها الحروف العربية سليمة وليست رمووز وطلاسم كالعادة سواء مع الووردبريس أو غيره ولاحظت انه الفورمات أصبح UTF تلقائيا… بصراحة كان شي مريح فعلا وبدأت تطلع في راسي أفكااااار حول تعديل النصوص في المواضيع دفعة واحدة وهكذا لأني بصراحة أستخدم الأسلوب هذا دائما في أغلب عملي على الكمبيوتر وعملتها كذا مرة مع قاعدة البيانات للووردبريس ولكن كان لتعديل مسارات الملفات في المواضيع وهكذا ولكن الآن صار فيه خيارات أوسع
وبعد ماتمت الترقية إلى 2.3.3 بنجاح قمت بعدها بالترقية إلى 2.5.1 وتمت العملية كاملة بنجاح وبدون مشاكل.
صور




صطيف
أهلاً فهد
واجهت هذه المشكلة ووجدت لها حلاً وضعته في مدونتي:
http://www.steaf.com/charset-utf8-on-wp-2-5
مع التحية
صطيف
الأحد مايو 18, 2008, 06:04 مFahadOnline
شكرا يا أخي الكريم على مشاركتك القيمة والرابط الذي وضعته سيفيد زوار هذا الموضوعز
أقترح عليك تضيف بعض من رسائل الخطأ اللتي تظهر بسبب مشكلة الترميز في موضوعك حتى تسهل عملية الوصول للباحثين … مثلا أنا أول ما بدات البحث في القوقل بحثت برسائل الخطأ وبعدها أكتشفت انه المشكلة في الترميز.
لديك موقع جميل بصراحة
تحياتي
الأحد مايو 18, 2008, 06:34 م