WP_DEBUG শর্তসাপেক্ষে / কেবল প্রশাসকদের / লগ ত্রুটির জন্য সংজ্ঞা দিন (সমস্ত লিঙ্কের জন্য কোয়েরি আর্গ যুক্ত করুন?)


20

আমি একটি সার্ভারে এমন একটি সাইট বিকাশ করছি যা ক্লায়েন্টেরও অ্যাক্সেস করে এবং আমি যা করতে চাই তা WP_DEBUGকেবল প্রশাসকদের জন্য প্রদর্শিত হয়। এটিকে ঘিরে ধরে ইয়োস্টের নিবন্ধটি উল্লেখ করা :

if ( isset($_GET['debug']) && $_GET['debug'] == 'true')
    define('WP_DEBUG', true);

WP_DEBUGকেবলমাত্র ?debug=trueতাদের সাথে সংযুক্ত থাকা URL গুলিই প্রদর্শন করবে forhttp://domain.com/?debug=true

আমি ভেবেছিলাম যে ডিবাগ বার এই তথ্যটি ডিফল্টরূপে সেখানে রাখতে পারে ( WP_DEBUGচালু করা হয় কি না ) তবে আমি মনে করি না যে আমি এটি বিশ্বাস করি না বলে আমি মনে করি না।

সুতরাং, আমি যা ভাবছিলাম তা কার্যকর হবে, এটি বর্তমান ব্যবহারকারীর জন্য একটি চেক ( manage_optionsসামর্থ্য থাকা এবং তারপরে লিংক চালানো উচিত add_query_arg():

function zs_admin_debug() {
    if (!current_user_can('manage_options')) {
        add_query_arg('debug','true');
    }
}

তবে আমি যা সম্পর্কে অনিশ্চিত তা হ'ল - এমন কোনও হুক আছে যা আমি এই সাইটের সাথে সমস্ত লিঙ্ককে প্রভাবিত করতে ব্যবহার করতে পারি? এইভাবে, প্রশাসকরা সর্বদা ডিবাগ দেখতে পান যা আমি ভেবেছিলাম যে এটি অত্যন্ত কার্যকর হবে। বরাবরের মতো যে কোনও সহায়তার জন্য ধন্যবাদ!


ফ্লাই ডিবাগিংয়ের জন্য এই (ইওস্টের) কাজটি অত্যন্ত কার্যকর। আমি লগিংটিও সক্ষম করেছিলাম যা ভাল কাজ করে। আমি আমার কোডটি if ( isset( $_GET['bug'] ) )
সামান্যভাবে

উত্তর:


18

আমি মনে করি না যে সর্বজনীন ইউআরএল হুক আছে। অনেকগুলি হুক রয়েছে এবং আমি এটি মিস করেছি, তবে আমি মনে করি না এটি আছে। আপনি adambrown.infoহুকগুলির মাধ্যমে দেখতে পারেন । অনেকগুলি ইউআরএল হুক রয়েছে তবে সর্বজনীন নয়।

যদি আমি অন্য সমাধানের পরামর্শ দিতে পারি: কোনও ফাইলগুলিতে ত্রুটিগুলি লগ করুন।

/**
 * This will log all errors notices and warnings to a file called debug.log in
 * wp-content (if Apache does not have write permission, you may need to create
 * the file first and set the appropriate permissions (i.e. use 666) ) 
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

এই কোডটি ডাব্লুপি-কনফিগারেশন ফাইলের জন্য কোডেক্স থেকে সোজা । যদি আপনি এটি করেন তবে আপনাকে জাগলিং $_GETবা বাছাইয়ের বিষয়ে চিন্তা করতে হবে না কে এবং কে প্রশাসক নয়।

সম্পাদনা:

আমি একটি সম্ভাব্য সমাধান ভুলে গেছি। আপনি জাভাস্ক্রিপ্ট দিয়ে এটি করতে পারেন। একটি সংক্ষিপ্ত স্ক্রিপ্ট পৃষ্ঠার সমস্ত URL টিতে আপনার প্যারামিটারটি সংযুক্ত করতে পারে এবং আপনি কেবল অ্যাডমিনদের জন্য স্ক্রিপ্টটি খুব সহজেই লোড করতে পারেন।

আমি এখনও 'লগ' সমাধানটি প্রস্তাব করব যেহেতু প্রত্যেকের জন্য ত্রুটিগুলি লগড। যদি আপনার লোকেরা আমার মতো হয় এবং " আরে " এর মতো ত্রুটি 'প্রতিবেদনগুলি' প্রেরণ করে তবে সাইটটি নষ্ট হয়ে গেছে যখন আপনি সেই ফর্মটি করেন "আপনি লগকে প্রশংসা করবেন। :)


আমার ধারণা আমি তাদের কেবল স্ক্রিনে দেখে ক্ষতিগ্রস্থ করেছি :) তবে একটি লগ ফাইল এখানে আরও অর্থবোধ করে। আমার শেষ সম্পর্কে আরও কিছু গবেষণা করবে, তবে এটি এইভাবে সেরা সমাধান হিসাবে উপস্থিত হয়েছি thus ধন্যবাদ!
Zach

5
নোট করুন যে নেটিভ লগিং ওয়েব অ্যাক্সেসযোগ্য ফাইলে লগ করার জন্য হার্ডকোডযুক্ত, যা উত্পাদনে এত ভাল ধারণা নয়। লাইভ সাইটগুলির জন্য পিএইচপি এর মাধ্যমে লগ ফাইলের ব্যক্তিগত অবস্থান (ওয়েব ফোল্ডারের বাইরে) কনফিগার করা ভাল।
রাস্ট

9

যদিও আমার প্রথম পদ্ধতিরটি আবর্জনা বিন এবং s_ha_dums উত্তর ছিল একটি পরিষ্কার, এবং সম্ভবত এটি সম্পর্কে সবচেয়ে ভাল উপায়, আমাকে আরও একটি কার্যকরী দৃশ্যের প্রস্তাব দেওয়া যাক:

নিম্নলিখিত কোনও কুকি সেট করে যা পরবর্তী 24 ঘন্টা (86400 সেকেন্ড) এর জন্য বৈধ হয় যখন কোনও প্রশাসক সিস্টেমে লগইন করে। ইন WP-config.php , ধ্রুব WP_DEBUGশর্তসাপেক্ষে উপস্থিতি বললেন কুকি মান উপর নির্ভর করে সংজ্ঞায়িত করা হয়।

ক্যাভেট: WP_DEBUGতারপরে trueএকই ব্রাউজার থেকে একই দিনে একই মেশিনে একই ব্রাউজার থেকে লগ ইন করা প্রত্যেকের জন্য সেট করা হবে ।

মধ্যে থিমের functions.php (অথবা একটি প্লাগইন হিসাবে):

function wpse_69549_admin_debug( $user_login, $user )
{
    if ( in_array( 'administrator', $user->roles ) ) {
        setcookie( 'wp_debug', 'on', time() + 86400, '/', get_site_option( 'siteurl' ) );
    }
}
add_action( 'wp_login', 'wpse_69549_admin_debug', 10, 2 );

দেখুন: কোডেক্স> অ্যাকশন রেফারেন্স> ডব্লিউপি_লগিন

মধ্যে WP-config.php :

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}

অ্যান্ড্রু ন্যাসিন সেই নিবন্ধটিতে মন্তব্য করেছিলেন, উল্লেখ করে initকোনও প্রভাব ফেলতে দেরী হয়। আমিও এটি চেষ্টা করেছিলাম এবং এটি কার্যকর হয়নি।
Zach

ধ্রুবকগুলির নতুন সংজ্ঞা দেওয়া যায় না। ধ্রুবক স্পর্শ না করেই কেউ ত্রুটি প্রতিবেদন করার স্তরটি সংশোধন করতে পারে তবে এটি নিখুঁত নয়। এছাড়াও initআগ্রহী হওয়ার আগে এখানে প্রচুর পরিমাণে ঘটছে ।
রাস্ট

আমি মনে করি গ্রহণযোগ্য উত্তরটি সবচেয়ে কার্যকর সমাধান হিসাবে রয়ে গেছে, তবুও, সম্পূর্ণতার জন্য, এই নতুন পদ্ধতির অন-স্ক্রিন ডিবাগ বিজ্ঞপ্তিগুলি দিয়ে কাজটি করা উচিত।
জোহানেস পিল

আহ খুব দুর্দান্ত কাজের - অবশ্যই এটি একটি শট দেবে
Zach

1
@ এস_হ_ডুম: এটি প্রতিটি উত্তর মনে রাখার মতো নয় - কমপক্ষে আমিও করি না (আমি আগে আমার নিজের উত্তরটি গুগল করেছি)। যদিও এটি আমার মনে আছে। আমি প্রথম উত্তর দিয়েছিলাম এবং নিখুঁত বাজে লিখেছিলাম। মোটেই আবেদন করেননি। আমি ন্যূনতম নীতি অনুসরণ করি যতক্ষণ না আমি কমপক্ষে 99.5% নির্দিষ্ট না হয়ে আমি যোগ্য (আমি মনে করি এটিই আপনার পক্ষে যায়) - এখানে আমি লক্ষ্যমাত্রার বাইরে ছিলাম। এটি জীবিতদের আমার থেকে বিরক্ত করে, তাই কয়েক ঘন্টা পরে, এটির একটি গ্রহণযোগ্য উত্তর পাওয়ার পরেও আমি এখনও এই সম্পর্কে ভাবছিলাম এবং উপরেরটি নিয়ে এসেছি। আমিও মনে করি এটি বেশ চতুর - লক্ষ্য করার জন্য ধন্যবাদ।
জোহানেস পিল 0

3

এটি আপনার প্রশ্নের সঠিকভাবে উত্তর দেয় না, তবে ব্যক্তিগত অভিজ্ঞতা থেকে আমি জানতে পেরেছি যে URL এর পরিবর্তে আইপি ঠিকানার সাথে মিল রেখে ডিবাগ মোড সক্ষম করা ভাল।

এর জন্য লিঙ্কগুলিতে সংশোধন করা দরকার এবং ডাব্লুপি লোডের ব্যবহারকারীর কার্যকারিতা লোড হওয়ার আগে অ্যাডমিনকে কীভাবে সনাক্ত করতে হবে তা সমাধান করে।


আমি আসলে এই ধারণাটিও পছন্দ করি - তাই যদি আমি পেস্টবিন.com/ এম 22 কে নাখের মতো এমন কিছু করি যা তাত্ত্বিকভাবে কাজ করতে পারে, সঠিক? লোকালহোস্টে প্রত্যাশার echo $_SERVER['REMOTE_ADDR']ফলন কি চলছে ::1? এটি সত্যই পৃথক লগ ফাইলের মতো শোনাচ্ছে এবং এইভাবে (যেমন হোম আইপিগুলি সমস্ত সময় পরিবর্তিত হয় বলে মনে হয়) ভাল ধারণা হতে পারে।
Zach

@ জাচ হ্যাঁ, এটির ::1কেবলমাত্র আইপিভি 6 সংস্করণ 127.0.0.1। ডায়নামিক আইপি কম সুবিধাজনক, তবে যাইহোক আমি কেবল লাইভ স্টাফের জন্য এটি অস্থায়ী সমস্যা সমাধান কৌশল হিসাবে বিবেচনা করি। সঠিক স্থানীয় ডিবাগ সেটআপ প্রতিস্থাপন করে না।
রাস্ট

আহ আমাকে ধন্যবাদ জানাতে ধন্যবাদ। এখানে অবশ্যই উভয় বিকল্পের মত, আমি @s_ha_dum জবাবটি নিয়ে যাচ্ছি (আপনার মন্তব্য ছাড়াও যেটি আমি উত্সাহিত করেছি) যা দুর্দান্ত। আবারও ধন্যবাদ, আমি সত্যিই এটির প্রশংসা করি!
Zach

1

এটিও সম্ভাব্য কৌশল, তবে এটি আপনাকে সংজ্ঞায়িত করা উচিত wp-config.phpকারণ WP_DEBUGএটি সেখানে সংজ্ঞায়িত হয়েছে:

if ( isset( $_GET['debugsecret'] ) && 'debugsecret' == $_GET['debugsecret'] ) {
      define( 'WP_DEBUG', true );         
}

যোগ ?debugsecret=debugsecretপৃষ্ঠা URL আপনি ডিবাগ করতে চান করতে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.