بازگشت   پی سی سیتی > کامپیوتر اینترنت و شبکه Computer internet > زبان های برنامه نویسی Programming

زبان های برنامه نویسی Programming بحث در مورد زبانهای مختلف برنامه نویسی

پاسخ
 
ابزارهای موضوع نحوه نمایش
  #1  
قدیمی 07-13-2013
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض در مورد session و توابع session_start() و session_regenerate_id() اشكالاتي كه ممكنه پيش بياد دو كلوم حرف حساب (اختصاصي)

استفاده از نشست session در زبان php و چگونگي استفاده از آن و رفع اشكالات احتمالي .

ببينيد ساعت 4.50 دقيقه صبحه و من واقعا بر خودم لازم دونستم كه بيام بگم گول محيط هاي توسعه wamp و xampp رو امثالهم رو نخوريد محيط هاي اجراي واقعي لذت همه چيو از دماغتون در ميارن اگه تازه شروع به كار كرده باشين




ميدونيد كه توابعي مثل

کد:
session_start()


session_regenerate_id()
بايد حتما قبل از اينكه يك خروجي توليد بشه استفاده شده باشند يعني هيچ گونه دستوري مثل echo در قبلشون وجود نداشته باشه


تمامي كد هاي زير اشكال دارند :



کد PHP:
<?php
echo "dsfd";
session_start();
?>
يا



کد PHP:
some html code 


<?php
session_start
();
?>
خب حتي كد اول توي محيطهاي ازمايشي مثل ومپ اشكالي ندارند
هر چند كه كدي به شكل فوق به وضوح احمقانه س !
اما ميخوام 2 تا موضوع رو عرض كنم كه گاها پيش مياد


بعضي از اديتورها يا نرم افزار ها (حتي بعضي نرم افزارهاي كار با اف تي پي )


اينتر (خط جديد ) رو تبديل ميكنند و به خروجي ميبرند
بنابراين اگر قبل از
کد PHP:
<?php session_start();?>
الكي يه خط اضافه (يه اينتر ) توي كدتون باشه ممكنه به خروجي بره و با اشكال مواجه بشين


يا اخر يك كد پي اچ پي يك خط اضافه اينتر خورده بعد اون فايل رو توي يه فايل ديگه اينكلود كرده اين include و بعد از اينكلود دستور استارت سشن رو نوشتين باز اشكال ميگيره


notepad++ و filezilla برنامه هاي استانداردي هستند كه ميتونين استفاده كنين


بنابراين كد زير ممكنه براتون ايجاد اشكال كنه


کد PHP:
1.php :
<?php $i=0;?>a blank line is here !

2.php :
<?phpinclude"1.php";session_start();?>
</div>


Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/admin/domains/p30city.net/public_html/1.php:7) in /p30city.net/public_html/1.php on line 16

يعني اينكه قبل از خط 16 يه اقايي لطف كرده يه چيزي فرستاده ! .

يه عده اي ميگن بحث session cache limiter رو كلا غير فعال كنين
اما اين كارو نكنين به فكر رفع مشكل باشين و تريس كنين ببينين كجا يه چيزي به خروجي رفته


--------------------------
مساله بعدي


اگه به هر دليلي عاجز موندين از اينكه بفهمين كي كجا داره خرابكاري ميكنه از تابع


ob_strat() استفاده كنين كه خروجي رو بافر ميكنه


اينم مشكلو حل ميكنه ( اما بهتره كه واقعا ببينيد مشكل از كجاست )‌.


-------------------------------------------
مساله بعدي اين هست كه خواهي نخواهي شما ممكنه توي يك پيج كه قسمتيش به خروجي رفته بخواي
session_regenerate_id()
كني
اولا به چه دردي ميخوره ؟
يكي از كاربردهاش اين هست كه شما حتما حتما حتما بايد بعد از هر نوع تغيير سطح كاربري مثلا بعد از لاگين كردن يا لاگ اوت كردن اين تابع رو استفاده كنين كه آي-دي سشن تغيير كنه
و اي دي قبل از بين بره ( session_destroy() با اين فرق داره اين كل سشن رو و متغيرهاش رو از بين ميبره )




داشتم عرض ميكردم كه فرض كنيد يك صفحه معمولي طراحي كردين وسطاش هم ري جنريت آي دي نياز دارين بر اساس رفتاري كه كاربر نشون داده
خب اگر تابع رو همونجا فراخواني بكنين اشكال بالا پيش مياد
به همين خاطر به نظر ميرسه (اگر نميخواهيد از دستور ob_start() استفاده كنيد )
بايد كاربر رو منتقل كنين به يك پيج ديگه اونجا قبل از هر چيزي دستورو استفاده كنين


حتما ديدين كه توي اكثر سايتها در هنگام لاگين كردن از يك صفحه ميانگذر عبور داده ميشيد البته كاربردهاي متفاوت زيادي داره اون صفحات اما من احساس ميكنم يكي از كاركردهاي اساسيش هم همين باشه


==================
مساله بعدي !


تابع


کد PHP:
mysql_set_charset('utf8'); 
هست كه باز توي محيط ومپ اشكالي نگرفت .


معمولا وقتي ديتاي فارسي از ديتابيستون ميخونين و ميخواين نمايش بدين اينو ست ميكنين
به من مدام اين دستور رو ميداد :




Warning: mysql_set_charset() [function.mysql-set-charset]: Access denied for user 'apache'@'localhost' (using password: NO)

و جالب اينكه يوزري كه من براي ديتابيسم استفاده كرده بودم اپاچي نبود حدس زدم كه هنوز لينك به ديتابيس انجام نشده


خلاصه اينكه اين دستور حتما بايد بعد از تنظيمات لينك به ديتابيس استفاده بشه نه قبل از اون


يعني اين غلطه :




کد PHP:

mysql_set_charset
('utf8');






 
mysql_connect($db_host$db_uname$db_pswd) or die(() ; 


شما حتما بايد بعد از mysql_connect() استفاده ش كنين نه قبل از اون .


اين هم از پند و اندرزهاي نيمه شب ما .






--------------------


Cannot send session cookie - headers already sent



نقل قول:

If you don't have any previeus output before the session-start() statement,then try to resave your .php file as an ansi-file or as utf-8 without BOM file. that's bc in some cases the editor itself writes things as an output in the file.






نقل قول:

Make sure you have nothing that outputs to the browser before those lines and delete any unessasary whitespace from that code . That error means you outputted something to the browser before line X and then tried to use a header value that can't be sent because of course the header had already been sent before line X.







Summary:

a) look for where it 'started at'
b) track the line number
c) check what's normally happening on that line.
--- If it's the end of the file, then it's blank spaces.
--- If it's the start of the file, it's likely spaces or incorrect encoding.
--- Elsewhere it could be a syntax error or the result of an "echo()" statement which is displaying info or perhaps debug code.
--- Common syntax errors include the use of single-quotes inside statements that already have single-quotes. Check to be sure your quotes aren't mismatched. If you need to use single-quotes while inside other single-quotes, change yours to \' instead of just '.
d) the rest of the info simply shows other execution information, mainly the part of the code that discovered that it cannot proceed as expected due to the problem that happened in the 'started at' location.

To change the encoding on the file, look at your editor's "save as" menu, or the program's preferences settings. A good editor to use is Notepad++. Or pick another from this list of good editors and related utilities for Zen Cart customizing.
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست




ویرایش توسط دانه کولانه : 07-13-2013 در ساعت 04:23 AM
پاسخ با نقل قول
جای تبلیغات شما اینجا خالیست با ما تماس بگیرید




پاسخ

برچسب ها
php, اختصاصي, برنامه نويسي


کاربران در حال دیدن موضوع: 1 نفر (0 عضو و 1 مهمان)
 

مجوز های ارسال و ویرایش
شما نمیتوانید موضوع جدیدی ارسال کنید
شما امکان ارسال پاسخ را ندارید
شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
شما نمیتوانید پست های خود را ویرایش کنید

BB code is فعال
شکلک ها فعال است
کد [IMG] فعال است
اچ تی ام ال غیر فعال می باشد



اکنون ساعت 06:05 PM برپایه ساعت جهانی (GMT - گرینویچ) +3.5 می باشد.



Powered by vBulletin® Version 3.8.4 Copyright , Jelsoft Enterprices مدیریت توسط کورش نعلینی
استفاده از مطالب پی سی سیتی بدون ذکر منبع هم پیگرد قانونی ندارد!! (این دیگه به انصاف خودتونه !!)
(اگر مطلبی از شما در سایت ما بدون ذکر نامتان استفاده شده مارا خبر کنید تا آنرا اصلاح کنیم)


سایت دبیرستان وابسته به دانشگاه رازی کرمانشاه: کلیک کنید




  پیدا کردن مطالب قبلی سایت توسط گوگل برای جلوگیری از ارسال تکراری آنها