المحتوى

06‏/11‏/2011

مشكلة وحل في PHP وهو ظهور رسالة خطأ Warning: Cannot modify header information - headers already sent

بعد استخدامي للملفات بالترميز utf-8 لاحظت ظهور سالة خطأ:
Warning: Cannot modify header information - headers already sent
وبعد الفحص والتمحيص تبين لي أن دالتين هما سبب المشكلة : cookies و header بينما تختفي المشلكة إذا كنت تستخدم ANSI
الحل يكمن في التالي:
أن لا يكون هناك أي مدخلات html قبل هاتين الدالتين ولكننا غالبا مانحتاج ذلك لذا قم بوضع الدالة التالية قبل أب كود في الصفحة:

session_start();
وهذه الدالة في النهاية ,,,,,
session_end_flush();

كما يجب أن لا يكون هناك فراغ قبل علامة البدء


ظهرت بعد ذلك المسكلة مرة أخرى وكان الحل هو استخدام برنامج محرر نصوص آخر مثل EmEditor وتخزين الملف بصيغة:
utf-8 without BOM وهنا مدونة جيدة لتوضيح ذلك

أو هناك حل آخر وهو حذف الكود الخفي المضاف للملف باستخدام محرر هيكسا XVI32 وهي الرموز الأولى في بداية الملف وتستطيع الاستفادة من مقالة جيدة هنا.

عموما: توجهت للصفحات التي فيها الدالتين: cookies و header وحولت ترميزهما للـ utf-8 without BOM
فنجح الأمر ونظرا لكثرة استخدامي للدالة header فقمت باستبدالها بدالة meta الخاص بـ refrech


30‏/10‏/2011

المحاذاة ناحية اليمين , مشكلة وحل رياضي

السلام عليكم

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

المشكلة ليست هنا ولكن المشكلة تكمن عندما يكون عرض الصورة غير محدد أي أنه يتغير باستمرار , مثلا عند عمل برنامج يستعرض صور متنوعة ولكن الصور تختلف في العرض !!!

لذا قمت بعمل دالة تقوم بحساب المسافات ,,,,,

والتطبيق كالتالي: يوجد في لغة الPHP مكتبة باسم GD للكتابة على الصور , وميزة هذه المكتبة هو دعمها للغة العربية , إلا أن المحاذاة فيها من ناحية اليسار لذا قمت بوضع الحل لذلك وسأشرحه بما يسر الله:

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

المسافة المطلوبة للاحداثي السيني=المساحة الفارغة التي تترك Q مضافا إليها المحاذاة اليمنى L1
المساحة الفارغة التي تترك Q = المسافة بين المحاذاة اليمني والمحاذاة اليسرى J مطروحا منه المسافة التي تشغلها الكلمة S
Q=J-S

أولا: المسافة بين المحاذاة اليمني والمحاذاة اليسرى J =المحاذاة اليمنى L2 مطروحا منه المحاذاة اليسرى L1
J=L2-L1
ثانيا: المسافة التي تشغلها الكلمة S=المساحة التي يشغلها الحرف Sa مضروبا في عدد الأحرف في الكلمة Ni
S=Sa*Ni

وحيث أن: المساحة التي يشغلها الحرف Sa=المسافة بين المحاذاة اليمنى والمحاذاة اليسرى J مقسوما على عدد الأحرف الكلية التي يمكنها شغل المسافة بين المحاذتان "إن صح التعبير" Nmax
Sa=J/Nmax

وبالرجوع إلى: المسافة التي تشغلها الكلمة S=المساحة التي يشغلها الحرف Sa مضروبا في عدد الأحرف في الكلمة Ni

S=J/Nmax*Ni

وبالرجوع إلى:المسافة الفارغة التي تترك Q = المسافة بين المحاذاة اليمني والمحاذاة اليسرى مطروحا منه المسافة التي تشغلها الكلمة

Q=J-S

وبذلك تكون المسافة المطلوبة للاحداثي السيني X

X=L1+Q
X=L1+(J-S)
X=L1+(J-(J/Nmax*Ni))
X=L1+J(1-(1/Nmax*Ni))

وهذه هي المعادلة ,,,,,,,, تظهر هنا صعبة في صياغتها , ولكن في العمل أسهل من ذلك ,,,,,,
سأضع إن شاء الله صورة الورقة التي قمت فيها بتحليل الأمر ,,,,,,,, خلاصة القول: بإمكاننا وضعها برمجيا باستخدام PHP كالتالي:
$xx_l1=250;
$xx_l2=590;
$xx_j=($xx_l2-$xx_l1);
$xx_n=(strlen($text)-1)/2;
$xx_nmax=40;
$rt=$xx_l1+$xx_j*(1-($xx_n/$xx_nmax));

على اعتبار L1&L2&nmax ثوابت , والمتغير هو عرض الكلمة text والنتيجة هي الاحداثي السيني rt

أترككم مع المعادلة ,,,,,,,, في أمان الله

29‏/10‏/2011

استخدام الترميز UTF-8 في MYSQL باستخدام PHP

السلام عليكم

في المواقع التي صممتها بلغة PHP بقاعدة البيانات MYSQL , كنت أستخدم الترميز الافتراضي ولا أقوم بتعديل محتويات MYSQL من PhpMyAdmin بل كنت أكتفي بالتعديل من أوامر PHP فقط ,,,,,
ولكن دعتني الحاجة لذلك عندما حاولت تصدير محتوى أحد Tables إلى ملف Excel ولكن الترميز لا يدعم العربي ,,,,
وبذلك احتجت لتوحيد الترميز الذي أعمل عليه إلى UTF-8 , وبما أن كل مواقعي السابقة بغير هذا الترميز , فقد لخصت التعديلات التي قمت بها وأحببت مشاركتها في مدونتي , رغم ترددي عن ذلك في البداية لأنني عادة ما أدون البرامج التي أمضي فيها وقت كافي لتجربتها , ولكني سأغير أسلوبي فلعل أحد يستفيد من ذلك أو يعلق على ذلك ويبين لي طريقة أفضل فأستفيد أنا والزوار من ذلك ,,,,,

التعديلات التي قمت بها لاستخدام الترميز UTF-8 في MYSQL باستخدام PHP


أولا: بعد دالة الاتصال بقاعدة البيانات mysql_connect
$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_query("set character_set_server='utf8'");
mysql_query("set names 'utf8'");

ثانيا: عند انشاء قاعدة البيانات
$result=mysql_query ("CREATE DATABASE ".DB_NAME." DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci");

ثالثا: عند انشاء جدول
$query = "create table ".DB_TABLE." (".$command_name.")"." ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci";

رابعا: في كل صفحة لا تنسى الترميز
meta http-equiv="Content-Type" content="text/html; charset= utf-8"
و
header( 'Content-Type: text/html; charset=UTF-8' );

أخيرا: لا تنسى تخزين كل ملف PHP بالترميز utf-8


27‏/01‏/2011

برنامج منبه النتائج

(خاص بطلبة كلية الهندسة جامعة طرابلس: خريف 2010-2011)

برنامج خاص بطلبة كلية الهندسة بجامعة طرابلس يمكنهم من الحصول على نتيجة موادهم و يقوم البرنامج بتنبيه صوتي في حال ظهرت مادة جديدة , كما أنه يسمح بتشغيل أي برنامج يختاره المستخدم في حال ظهرت نتيجة مادة جديدة

لتحميل البرنامج

17‏/01‏/2011