मैं मुफ्त होस्टिंग और संगीतकार से कैसे जूझ रहा हूं

इस बात से कोई इंकार नहीं करेगा कि संगीतकार एक काफी सुविधाजनक उपकरण है, और यह कि मुफ्त या सस्ते होस्टिंग प्रदाता हैं जो संगीतकार के साथ काम करने के लिए कोई कंसोल या बिल्ट-इन टूल प्रदान नहीं करते हैं। यह ठीक उसी तरह का स्टैक है जिस पर मैं आया था। खैर, जैसा कि जेडी ने वसीयत की, विक्रेता को तुरंत जोड़ा गया है। ताकि उनके भंडार को अव्यवस्थित न किया जाए और पुस्तकालयों को नहीं चलाया जा सके।

पहली बात यह थी कि वेब से एक स्क्रिप्ट को सुलभ बनाना था, जिसे सही समय पर खींचा जा सकता है और यह निर्भरता को अद्यतन करेगा या उन्हें स्थापित करेगा।

ऐसा करने के लिए, हमें कुछ जोड़तोड़ करने की जरूरत है।

1. स्थानीय रूप से संगीतकार को स्थापित करने के लिए, हमें composer.phar डाउनलोड करना होगा

2. एक फ़ोल्डर बनाएं जहां इसे अनपैक किया जाएगा (इसे var होने दें)।

3. कंपोज़र बनाएं। (अच्छी तरह से, इस बारे में मुझे लगता है कि आप पहले से ही जानते हैं कि आपने संगीतकार के साथ काम किया है)।

4. खैर, वेब से संगीतकार के साथ काम करने के लिए स्क्रिप्ट खुद बनाएं (इसे कंपोज़र बनाएं। पीपी )।

इसलिए हमारे पास हमारी भावी साइट की संरचना है:

साइट संरचना

कंपोज़र.फेयर अपने आप इस प्रकार होगा:

<?php use Composer\Console\Application; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Output\StreamOutput; // ,       ini_set("memory_limit", -1); ini_set("max_execution_time", 0); //  $root = __DIR__ . "/../"; //   $dir = "{$root}/var"; //  Phar    ,    if (file_exists("{$dir}/vendor/autoload.php") === false) { $composerPhar = new Phar("{$root}/composer.phar"); $composerPhar->extractTo($dir); } //      require_once("{$dir}/vendor/autoload.php" . ''); //         putenv("COMPOSER_HOME={$dir}/bin/composer"); //     vendor        WebRoot chdir($root); //   $input = new ArrayInput(['command' => 'install']); //    $stream = fopen('php://temp', 'w+'); $output = new StreamOutput($stream); // ""  $application = new Application(); $application->setAutoExit(false); $application->run($input, $output); //     echo stream_get_contents($stream); 


और अगर आप एक खुशमिजाज आदमी हैं। स्क्रिप्ट को कॉल करने के बाद, यह विक्रेता फ़ोल्डर का विस्तार करेगा।

लेकिन मैंने ऐसा नहीं किया) मेरी योजनाओं को तोड़ने वाली पहली चीज़ php.ini पर phar.readonly = on सेट कर रही थी, और जैसा कि आपने मुफ्त होस्टिंग पर अनुमान लगाया होगा, आप आमतौर पर इसे संपादित नहीं कर सकते। फिर मैंने कामरस की तलाश शुरू कर दी।

पहली चीज़ जो मैंने कोशिश की थी वह user.ini बनाना था जो php.ini में सेटिंग्स को ओवरराइड करेगा, यह लोकल मशीन पर काम करता है) लेकिन होस्टिंग पर यह फंक्शनैलिटी ठप्प पड़ी थी।

फिर मैंने एक और चाल का उपयोग करने की कोशिश की। संगीतकार का नाम बदलें। सिर्फ संगीतकार के लिए , परिणाम समान है। यह LAN पर काम करता था, लेकिन होस्टिंग पर नहीं।

फिर सभी समान, एक स्क्रिप्ट के बजाय, मुझे फ़ाइलों को स्थानीय रूप से var में अनपैक करना और उन्हें सर्वर पर अपलोड करना था।

यह प्राधिकरण के साथ स्क्रिप्ट को बंद करने के लायक भी है, ताकि सभी प्रकार के व्यक्ति इसे न बुलाएं। स्क्रिप्ट के अंतिम संस्करण में भी, मैंने मापदंडों के माध्यम से कमांड का विकल्प जोड़ा।

 <?php use Composer\Console\Application; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Output\BufferedOutput; use Symfony\Component\Console\Output\OutputInterface; // ,       ini_set("memory_limit", -1); ini_set("max_execution_time", 0); //  Web     ,  -     if (isset($_SERVER['HTTP_AUTHORIZATION']) AND !empty($_SERVER['HTTP_AUTHORIZATION'])) { list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)), 2); } elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) AND !empty($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) { list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)), 2); } //  ,     -   $config = [ 'user' => 'admin', 'password' => 'admin', ]; //      if ((isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER'] == $config['user'] && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW'] == $config['password'])) { unset($_SERVER['PHP_AUTH_USER']); unset($_SERVER['PHP_AUTH_PW']); } else { $uniqueID = uniqid(); header("WWW-Authenticate: Basic realm='{$uniqueID}'"); header('HTTP/1.0 401 Unauthorized'); exit(); } //  $root = realpath(__DIR__ . "/../"); //   $dir = "{$root}/var"; //  Phar    ,    if (file_exists("{$dir}/vendor/autoload.php") === false) { $composerPhar = new Phar("{$root}/composer.phar"); $composerPhar->extractTo($dir); } //      require_once("{$dir}/vendor/autoload.php" . ''); //         putenv("COMPOSER_HOME={$dir}/bin/composer"); //     vendor        WebRoot chdir($root); //   ,             ,      ) //  composer update,       ?command=install $params = !empty($_GET) ? $_GET : ['command' => 'update']; //  . $input = new ArrayInput($params); //    $output = new BufferedOutput( OutputInterface::VERBOSITY_NORMAL //true ); // ""  $application = new Application(); $application->setAutoExit(false); $application->run($input, $output); $content = $output->fetch(); echo "<pre>"; //     echo $content; echo "<br>"; echo (file_exists("{$root}/vendor/autoload.php")) ? 'Autoload <b>installed</b>' : 'Autoload <b>Missing</b>'; 

इसके अलावा, प्राधिकरण के हेडर (सीजीआई के मामले में) और HTTPS को पुनर्निर्देशित करने के लिए एक नियम जोड़ने से आहत नहीं होता, क्योंकि प्राधिकरण स्पष्ट रूप से निकल जाता है।

 RewriteEngine On #   CGI,    ,      RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] #  HTTPS,        RewriteCond %{HTTPS} off RewriteCond %{HTTP:SSL} !=1 [NC] RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L] 

Source: https://habr.com/ru/post/hi439424/


All Articles