الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة Warning: Cannot modify header information - headers already sent by (output started at /usr/local/shared/tomcat/rohali/php/login.php:2) in /usr/

بدأه rohaili في 9 أبريل 2013 · 13 رد · 2,643 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في بعض صفحات الموقع تظهر الرسالة التالية


 


Warning: Cannot modify header information - headers already sent by (output started at /usr/local/shared/tomcat/user/php/login.php:2) in /usr/local/shared/tomcat/user/php/login.php on line 41


فما حلها


300_130.gif

#2

اعتقد انك قمت باستخدام الدالة set_cookie او قمت ببدء الجلسة في السطر 41 . فيجب عليك التحقق من عدم ارسال اي محرف قبل هذا السطر اتمنى ان تضع الكود لكي استطيع مساعدتك اكثر :)

#3
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<?php
include 'connect.php';
if (isset($_POST['b'])) {
    $id = $_POST['id'];
    $pass = $_POST['pass'];

    $query = "select * from teachers where id = " . $id . " and pass = " . "'$pass'";
    $result = mysqli_query($dbc, $query);
    $count = mysqli_num_rows($result);

        if ($count == 1) {
            $row = mysqli_fetch_array($result);
            session_start();
            $_SESSION['id'] = $row['id'];
            $_SESSION['job'] = $row['job'];

            switch ($_SESSION['job']) {
                case 1: header("Location: admin_main.php");
                    break;
                case 2: header("Location: sch_main.php");
                    break;
                case 3: header("Location: sup_main.php");
                    break;
                case 4: header("Location: teacher_main.php");
                    break;
            }
        }
        else {
            $m = "رقم الهوية أو كلمة المرور غير صحيحة";
            header("Location: index.php?m=" . "$m");
        }
} 
else {
    $m = "رقم الهوية أو كلمة المرور غير صحيحة";
    header("Location: index.php?m=" . $m);
}
?>

هذا كود للدخول للموقع والمشكلة في السطر 31 لاني حذفت بعض الاسطر

300_130.gif

#4

يبدو ان المشكلة من اول سطر . قاعدة عامة لا تستخدم اي دالة تقوم بتغيير http header بعد طباعة اي حرف . المهم قم بتغيير مكان اول سطر لكي يصبح بعد استدعاء الدالة header اتمنى ان تكون قد حلت المشكلة

#5

جزاك الله خيرا


 


حذفت السطر الاول ولم تحل المشكلة


 


ملاحظة المشكلة تظهر عند رفع الموقع فقط اما في جهازي فلا تظهر المشكلة !


300_130.gif

#6

هل قمت بحذف السطر الفارغ ؟ , هل يوجد هناك أي سطر في ملف connect.php يقوم بطباعة أي حرف ؟ , أظن ان إعدادات السيرفر المحلي لديك تستخدم output buffering في ملف php.ini ويمكنك استخدامها يدويا ً عند استدعاء الدالة ob_start

#7
<?php
    $dbc = @mysqli_connect('localhost', 'user', 'pass', 'data')
            or die('لم يتصل') . mysqli_connect_error();
    mysqli_set_charset($dbc, 'utf8');
?>

هذا الملف connect ولا يوجد به سطر فارغ وقد جربت وحذفت الامر or die وما زالت المشكلة

 

كيف اصل الى php.ini

 

وجزاك الله خيرا

300_130.gif

#8

نقلت الموقع لخادم آخر ولم تظهر المشكلة والحمدلله


 


جزاكم الله خيرا


300_130.gif

#9
اقتباس

نقلت الموقع لخادم آخر ولم تظهر المشكلة والحمدلله

 

جزاكم الله خيرا

- أنت بهذا لم تحل المشكلة , حاول أن تبحث عن سبب المشكلة وعالجه .

- كما قال لك أخي عبداللطيف تجنب طباعة أي شيئ قبل إستخدام دالة header أو ترك مسافات فارغة قبل بداية كود php أو كتابة أكواد html قبل أكواد php التي تحتوي على دالة header , وغالباً ترميز الملف يسبب بعض المشاكل بسبب بادئة ترميز الملف وهو عبارة عن حروف غير مرئية في بداية الملف لتعريف نوعية ترميز الملف وأفضل حل لهذه المشكلة هي أن تجعل ترميز الملف UTF-8 without BOM أي بدون بادئة وهذا الترميز ستجده غير ثابت أي تقوم بتحويل الوثيقة ثم تعود إليها مره أخرى ستجد أن الترميز تحول إلى ANSI الترميز الإفتراضي على نظام ويندوز -بالنسبة لمستخدمي ويندوز- فلتجنب هذا عليك فقط أن تضع نص باللغة العربية في الوثيقة في أي مكان وليكن بمثابة تعليق وبهذا سيظل هذا الترميز بدون تغيير , كنوع لتعريف تعدد اللغات داخل الوثيقة - فكرة مجربة :D - .

 

دمت بود

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#10

جزاك الله خيرا


 


لكن لماذا لم تظهر المشكلة على الخادم الآخر


 


كل الحلول التي ذكرتها جربتها ولم تنفع


 


انا استخدم netbeans ide  و xampp

300_130.gif

#11

ربما بعض إعدادات السرفر هي التي سببت هذه المشكلة كما أشار أخي عبداللطيف في الأعلى

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#12

السلام عليكم

 

كما هو موضح هنا http://www.php.net/manual/en/function.header.php

 

 

اقتباس

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP.

 

أي أنه لا يجب إرسال أي شيء قبل المناداة على header()، لكنك في الكود تكتب ال meta tag قبل المناداة على header(). ربما هذا هو المشكل

 

أما لماذا لا يظهر المشكل في الخادم الآخر، فلأنه لا يظهر ال warnings في إعداداته، كما قال الأخ

#13

السلام عليكم

ملاحضة

session_start

يجب ان تكون ان تكون اول سطر مباشرة بعد فتح php

الكود الكامل و الحل لمشكلتك باذن الله

<?php
session_start();
session_cache_limiter("nocache")
include 'connect.php';
if (isset($_POST['b'])) {
    $id = $_POST['id'];
    $pass = $_POST['pass'];

    $query = "select * from teachers where id = " . $id . " and pass = " . "'$pass'";
    $result = mysqli_query($dbc, $query);
    $count = mysqli_num_rows($result);

        if ($count == 1) {
            $row = mysqli_fetch_array($result);
            
            $_SESSION['id'] = $row['id'];
            $_SESSION['job'] = $row['job'];

            switch ($_SESSION['job']) {
                case 1: header("Location: admin_main.php");
                    break;
                case 2: header("Location: sch_main.php");
                    break;
                case 3: header("Location: sup_main.php");
                    break;
                case 4: header("Location: teacher_main.php");
                    break;
            }
        }
        else {
            $m = "رقم الهوية أو كلمة المرور غير صحيحة";
            header("Location: index.php?m=" . "$m");
        }
} 
else {
    $m = "رقم الهوية أو كلمة المرور غير صحيحة";
    header("Location: index.php?m=" . $m);
}
?>
#14

جزاكم الله خيرا


300_130.gif

مواضيع مشابهة