انتقل إلى المحتوى

الاستضافة المقيّدة بالعمليات

تعطّل الاستضافات المشتركة والحاويات المحصّنة وبعض منصات PaaS وظائف العمليات من خلال disable_functions. تعمل عمليات البحث وإعادة الكتابة والفهرسة في Greph داخل العملية PHP (وتُنشئ عمليات الفحص المتوازية نسخًا عاملة متفرعة منها متى أمكن)، لذا تظل تعمل في تلك البيئات.

ما الذي يبدأ العمليات

الرمز الدالة الاستخدام
Greph\Support\ToolResolver shell_exec() تحديد مواقع ملفات grep وrg وsg (أو npm) وgh الخارجية على PATH
Greph\Support\CommandRunner proc_open() تشغيل تلك الملفات التنفيذية وبرامج Greph الفرعية
Greph\Parallel\WorkerPool pcntl_fork() العمال المتوازون لـ -j N / jobs: N

يُستخدم ToolResolver وCommandRunner في أدوات المقارنة فقط: مولّد مصفوفة الميزات، وأداة قياس الأداء، وأداة اختبار المرجع. ولا تستدعيها Greph::search*() وGreph::rewriteAst() ومنشئات الفهرس والبرامج التنفيذية الأربعة مطلقًا.

يتحقق تجمع العمال من function_exists('pcntl_fork') قبل إنشاء عملية متفرعة. لا تكون الدالة المدرجة في disable_functions موجودة من منظور PHP، لذا تعمل كل قطعة على هذا النوع من المضيفات داخل العملية، بالنتيجة نفسها التي يحققها -j 1. راجع العمال المتوازون.

عند تعطيل proc_open وshell_exec وexec وsystem وpassthru وpopen وpcntl_fork جميعًا، يعمل البحث النصي باستخدام jobs: 4 وإعادة كتابة AST وgreph-index build وgreph-index ast-cache build وsearch، بالإضافة إلى أغلفتي rg وsg، بصورة طبيعية.

المساعدات التي لا تبدأ عمليات

عند تضمين مساعدات المقارنة في مضيف كهذا، أنشئها باستخدام سياسة صريحة لتعطيل العمليات:

PHP
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;

$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();

ترفض هذه النسخ العمل بأمان: كل عملية بحث أو أمر ترمي RuntimeException بدلًا من محاولة بدء عملية.

Text
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version

مرّرها أينما يُقبل ToolResolver أو CommandRunner، مثل وسيطي toolResolver: وcommandRunner: في Greph\FeatureMatrix\FeatureMatrixGenerator. عندئذ يكتمل المولّد دون بدء عملية، لكنه لن ينتج تقريرًا مفيدًا: تُسجّل الاختبارات المسبقة لأدوات المنبع على أنها Unavailable، وتُسجّل الاختبارات التي تشغّل ملفات Greph التنفيذية على أنها Fail، لأن كل اختبار مسبق هو أمر. أنشئ مصفوفة الميزات على جهاز يسمح بتشغيل العمليات.