php 私有服务器上的 CodeIgniter 系统路径不正确

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21128063/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 03:50:30  来源:igfitidea点击:

CodeIgniter incorrect system path on private server

phpxamppcodeigniter-2

提问by Mohammad Sadiq Shaikh

codeigniter project when uploaded to server gives me the following error.

上传到服务器时的 codeigniter 项目给了我以下错误。

Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php

您的系统文件夹路径似乎未正确设置。请打开以下文件并更正:index.php

it is working well locally& on 000webhost.comhosting.

在本地000webhost.com托管上运行良好

When uploaded to private server of parallels it gives the above error.

当上传到并行的私人服务器时,它会出现上述错误。

My index.php is as follows.

我的 index.php 如下。

<?php
define('ENVIRONMENT', 'development');

if (defined('ENVIRONMENT'))
{
switch (ENVIRONMENT)
{
    case 'development':
        error_reporting(E_ALL);
    break;

    case 'testing':
    case 'production':
        error_reporting(0);
    break;

    default:
        exit('The application environment is not set correctly.');
}
 }
$system_path = 'system';
$application_folder = 'application';


if (defined('STDIN'))
{
    chdir(dirname(__FILE__));
}

if (realpath($system_path) !== FALSE)
{
    $system_path = realpath($system_path).'/';
}

$system_path = rtrim($system_path, '/').'/';

if ( ! is_dir($system_path))
{
    exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME));
}

define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));
define('EXT', '.php');

// Path to the system folder
define('BASEPATH', str_replace("\", "/", $system_path));

// Path to the front controller (this file)
define('FCPATH', str_replace(SELF, '', __FILE__));

// Name of the "system folder"
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));


// The path to the "application" folder
if (is_dir($application_folder))
{
    define('APPPATH', $application_folder.'/');
}
else
{
    if ( ! is_dir(BASEPATH.$application_folder.'/'))
    {
        exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
    }

    define('APPPATH', BASEPATH.$application_folder.'/');
}
 require_once BASEPATH.'core/CodeIgniter.php';

回答by ReNiSh A R

try this .htaccess on root folder

在根文件夹上试试这个 .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/ [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/ [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/ [L]
</IfModule>
<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

assumming that index.phpis your index page.

假设index.php是您的索引页。

and change in config.php

并更改 config.php

$config['index_page'] = '';

回答by Randika Vishman

In my case, I didn't go to mess with .htaccess, actually before going to do that, as it's suggested in the above post, I tried its later part, which is changing the

在我的情况下,我没有去搞乱 .htaccess,实际上在这样做之前,正如上面帖子中所建议的那样,我尝试了它的后期部分,它正在改变

$config['index_page'] = 'index.php';

To the following

到以下

$config['index_page'] = '';

And it simply worked for me!

它对我很有效!

~~~~~~~~~~~~~~~~~~ Edit to add some more information ~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~ 编辑添加更多信息~~~~~~~~~~~~~~~~~~~~~

My CodeIgniter Directory structure:

我的 CodeIgniter 目录结构:

htdocs /
       |_ CI /
             |_ OnlineStoreApp /
                               |_ online_store_ci  // This is the CodeIgniter folder
                               |_ public_html /
                                              |_ css
                                              |_ js
                                              |_ fonts
                                              |_ .htaccess // see bellow for more details
                                              |_ index.php // see bellow for more details

And my .htaccess file contains the following:

我的 .htaccess 文件包含以下内容:

DirectoryIndex index.php
RewriteEngine on
RewriteCond  !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?/ [L,QSA]

My index.phpfile is the same one provided by CodeIgniter root folder, but I have to change two lines in it as I place it inside the public_htmldirectory instead of it's original place:

我的index.php文件与 CodeIgniter 根文件夹提供的文件相同,但我必须更改其中的两行,因为我将它放在public_html目录中而不是原来的位置:

Note:look for the following two lines within the index.php,
- $system_path
- $application_folder
They have been edited, to point the locations, where systemdirectory and applicationdirectory reside in.

注意:index.php,
- $system_path
- 中查找以下两行,$application_folder
它们已被编辑,以指向system目录和application目录所在的位置。

<?php

/*
 *---------------------------------------------------------------
 * APPLICATION ENVIRONMENT
 *---------------------------------------------------------------
 *
 * You can load different configurations depending on your
 * current environment. Setting the environment also influences
 * things like logging and error reporting.
 *
 * This can be set to anything, but default usage is:
 *
 *     development
 *     testing
 *     production
 *
 * NOTE: If you change these, also change the error_reporting() code below
 *
 */
    define('ENVIRONMENT', 'development');
/*
 *---------------------------------------------------------------
 * ERROR REPORTING
 *---------------------------------------------------------------
 *
 * Different environments will require different levels of error reporting.
 * By default development will show errors but testing and live will hide them.
 */

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'development':
            error_reporting(E_ALL);
        break;

        case 'testing':
        case 'production':
            error_reporting(0);
        break;

        default:
            exit('The application environment is not set correctly.');
    }
}

/*
 *---------------------------------------------------------------
 * SYSTEM FOLDER NAME
 *---------------------------------------------------------------
 *
 * This variable must contain the name of your "system" folder.
 * Include the path if the folder is not in the same  directory
 * as this file.
 *
 */
    $system_path = '../online_store_ci/system';

/*
 *---------------------------------------------------------------
 * APPLICATION FOLDER NAME
 *---------------------------------------------------------------
 *
 * If you want this front controller to use a different "application"
 * folder then the default one you can set its name here. The folder
 * can also be renamed or relocated anywhere on your server.  If
 * you do, use a full server path. For more info please see the user guide:
 * http://codeigniter.com/user_guide/general/managing_apps.html
 *
 * NO TRAILING SLASH!
 *
 */
    $application_folder = '../online_store_ci/application';

/*
 * --------------------------------------------------------------------
 * DEFAULT CONTROLLER
 * --------------------------------------------------------------------
 *
 * Normally you will set your default controller in the routes.php file.
 * You can, however, force a custom routing by hard-coding a
 * specific controller class/function here.  For most applications, you
 * WILL NOT set your routing here, but it's an option for those
 * special instances where you might want to override the standard
 * routing in a specific front controller that shares a common CI installation.
 *
 * IMPORTANT:  If you set the routing here, NO OTHER controller will be
 * callable. In essence, this preference limits your application to ONE
 * specific controller.  Leave the function name blank if you need
 * to call functions dynamically via the URI.
 *
 * Un-comment the $routing array below to use this feature
 *
 */
    // The directory name, relative to the "controllers" folder.  Leave blank
    // if your controller is not in a sub-folder within the "controllers" folder
    // $routing['directory'] = '';

    // The controller class file name.  Example:  Mycontroller
    // $routing['controller'] = '';

    // The controller function you wish to be called.
    // $routing['function'] = '';


/*
 * -------------------------------------------------------------------
 *  CUSTOM CONFIG VALUES
 * -------------------------------------------------------------------
 *
 * The $assign_to_config array below will be passed dynamically to the
 * config class when initialized. This allows you to set custom config
 * items or override any default config values found in the config.php file.
 * This can be handy as it permits you to share one application between
 * multiple front controller files, with each file containing different
 * config values.
 *
 * Un-comment the $assign_to_config array below to use this feature
 *
 */
    // $assign_to_config['name_of_config_item'] = 'value of config item';



// --------------------------------------------------------------------
// END OF USER CONFIGURABLE SETTINGS.  DO NOT EDIT BELOW THIS LINE
// --------------------------------------------------------------------

/*
 * ---------------------------------------------------------------
 *  Resolve the system path for increased reliability
 * ---------------------------------------------------------------
 */

    // Set the current directory correctly for CLI requests
    if (defined('STDIN'))
    {
        chdir(dirname(__FILE__));
    }

    if (realpath($system_path) !== FALSE)
    {
        $system_path = realpath($system_path).'/';
    }

    // ensure there's a trailing slash
    $system_path = rtrim($system_path, '/').'/';

    // Is the system path correct?
    if ( ! is_dir($system_path))
    {
        exit("Your system folder path does not appear to be set correctly. Please open the following file and correct this: ".pathinfo(__FILE__, PATHINFO_BASENAME));
    }

/*
 * -------------------------------------------------------------------
 *  Now that we know the path, set the main path constants
 * -------------------------------------------------------------------
 */
    // The name of THIS file
    define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

    // The PHP file extension
    // this global constant is deprecated.
    define('EXT', '.php');

    // Path to the system folder
    define('BASEPATH', str_replace("\", "/", $system_path));

    // Path to the front controller (this file)
    define('FCPATH', str_replace(SELF, '', __FILE__));

    // Name of the "system folder"
    define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));


    // The path to the "application" folder
    if (is_dir($application_folder))
    {
        define('APPPATH', $application_folder.'/');
    }
    else
    {
        if ( ! is_dir(BASEPATH.$application_folder.'/'))
        {
            exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
        }

        define('APPPATH', BASEPATH.$application_folder.'/');
    }

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 *
 */
require_once BASEPATH.'core/CodeIgniter.php';

/* End of file index.php */
/* Location: ./index.php */

Hope this might help somebody out there!

希望这可以帮助那里的人!

CodeIgniter Rocks!

CodeIgniter 摇滚!

回答by Abdulla Nilam

If You uploading Your project follow these steps

如果您上传您的项目,请按照以下步骤操作

  1. Make sure You have upload application, system, index.php, .htaccess

  2. Modify your config/database.phpwith your hosted database.

  3. Make sure URL spellings, Cz LINUX Hosting is Case-Sensitive.

  4. Make sure all resources are uploaded to server. (CSS, JS, Images, etc ...)

  1. 确保你有上传应用程序系统index.php.htaccess

  2. config/database.php使用您的托管数据库修改您的。

  3. 确保 URL 拼写,Cz LINUX Hosting 区分大小写。

  4. 确保所有资源都上传到服务器。(CSS、JS、图像等...)

Hopes this helps You :)

希望这对你有帮助:)

回答by Denis Bhojvani

I have same issue then i create controller inside that i have created index method then call cron file with below command it is working for me.

我有同样的问题,然后我在里面创建控制器,我已经创建了索引方法,然后使用以下命令调用 cron 文件,它对我有用。

wget domain_name/google_script -O /dev/null

google_script = "My controller class name"

this solution work for me.

这个解决方案对我有用。

回答by Robert Collins

I've never in 40+ years of doing this seen a product delivery as bad as this one. And the internet searches to resolve configuration/design issues just makes the solution effort even worse.

在过去的 40 多年里,我从未见过如此糟糕的产品交付。互联网搜索解决配置/设计问题只会使解决方案工作变得更糟。

Trying to get this product to work has been a absolute nightmare. This makes Spring Boot look like the greatest improvement in product delivery ever!!

试图让这个产品工作绝对是一场噩梦。这让 Spring Boot 看起来像是有史以来最大的产品交付改进!!

If you want to force some into SaaS this is the way to get it done.

如果你想强迫一些人进入 SaaS,这就是完成它的方法。