如何在服务器上部署和运行zend项目?
我有一个关于在服务器上部署 Zend 项目的问题。在本地主机上,我使用虚拟主机将文档根目录设置为 public/index.php 文件夹。
- 我现在应该如何部署? 我已将整个项目复制到服务器上,但它无法正常工作,因为我的所有路径都是错误的(因为所有路径都是相对于公共文件夹设置的)。
- 我应该怎么办?是否可以设置相对于服务器上我的主路径的所有路径?在这种情况下如何将我的应用程序重定向到任何控制器? 或者也许我只需要在服务器上创建虚拟主机,但我没有权限这样做:/?
我需要一些建议,谢谢
Application.ini :
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.view[] =
resources.db.isDefaultTableAdapter = true
resources.db.adapter = PDO_MYSQL
resources.db.params.charset = "utf8"
resources.db.params.host = HOST
resources.db.params.username = "p"
resources.db.params.password = "***"
resources.db.params.dbname = "p"
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
Index.php:
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
defined('DESTINATION_IMAGES') || define('DESTINATION_IMAGES', './usersImages/');
defined('TRUE_STORY_EMAIL') || define('TRUE_STORY_EMAIL', '[email protected]');
defined('TRUE_STORY_NAME') || define('TRUE_STORY_NAME', 'True story team');
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
.htaccss:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
phpinfo();
w 加载的模块 我有 mod_rewrite 所以可能已启用。
-----------------------------
--------编辑 04.05.2011 -----
我已经部署了项目再次在服务器上,我已经设置了 RewriteBase /~user2/Project2/public
现在 URL 映射正在工作(可能第一次是我部署它时出现错误,这就是它不工作的原因)。
但我的项目仍然存在问题。当我转到 Auth 控制器时:
public function indexAction() {
// action body
$form = new Application_Form_Login();
$request = $this->getRequest();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
try {
if ($this->_process($form->getValues())) {
$userDT = new Application_Model_DbTable_User();
$idUser = Zend_Auth::getInstance()->getIdentity()->id;
if ($userDT->isConfirmed($idUser)) {
$this->_helper->redirector->gotoRoute(
array(
'controller' => 'index',
'action' => 'index'
)
);
} else {
$form->setDescription('Your account is not confirmed!');
Zend_Auth::getInstance()->clearIdentity();
$this->_helper->redirector->gotoRoute(
array(
'controller' => 'Registration',
'action' => "step",
'idUser' => $idUser
)
);
}
} else {
$form->setDescription('There was an error. Try to log in once again please');
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
$this->view->form = $form;
}
在页面上我只能看到:  并且我不知道这意味着什么,因为我检查不同控制器中的重定向是否正常工作意味着我的项目看到 zend 库,所以我不能明白为什么它不在视图中创建表单吗?
观点:
<?php $this->headTitle('Login'); ?>
<h1>Login</h1>
<?php echo $this->form->setAction($this->url()); ?>
I have a question about deploying Zend project on a server. On localhost I used virtual host to set the document root to the public/index.php folder.
- How should I deploy it now?
I have copied whole my project on the server but it is not working as all my paths are wrong (as all are set up relative to the public folder). - What should I do? Is is possible to set all my paths relative to the my home path on the server? How can I redirect my application to any controller in this situation?
Or maybe I just need to create virtual host on the server but I do not have permission to do it:/?
I need some advices, thank you
Application.ini :
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.view[] =
resources.db.isDefaultTableAdapter = true
resources.db.adapter = PDO_MYSQL
resources.db.params.charset = "utf8"
resources.db.params.host = HOST
resources.db.params.username = "p"
resources.db.params.password = "***"
resources.db.params.dbname = "p"
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
Index.php:
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
defined('DESTINATION_IMAGES') || define('DESTINATION_IMAGES', './usersImages/');
defined('TRUE_STORY_EMAIL') || define('TRUE_STORY_EMAIL', '[email protected]');
defined('TRUE_STORY_NAME') || define('TRUE_STORY_NAME', 'True story team');
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
.htaccss:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
phpinfo();
w Loaded Modules I have mod_rewrite so probably is enabled.
-----------------------------
--------EDIT 04.05.2011 -----
I have deployed the project once again on the server and I have set RewriteBase /~user2/Project2/public
And now the URL mapping is working (probably the first time was an error when I deployed it that is why it was not working).
But I still have problems with the project. When I go to the Auth controller :
public function indexAction() {
// action body
$form = new Application_Form_Login();
$request = $this->getRequest();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
try {
if ($this->_process($form->getValues())) {
$userDT = new Application_Model_DbTable_User();
$idUser = Zend_Auth::getInstance()->getIdentity()->id;
if ($userDT->isConfirmed($idUser)) {
$this->_helper->redirector->gotoRoute(
array(
'controller' => 'index',
'action' => 'index'
)
);
} else {
$form->setDescription('Your account is not confirmed!');
Zend_Auth::getInstance()->clearIdentity();
$this->_helper->redirector->gotoRoute(
array(
'controller' => 'Registration',
'action' => "step",
'idUser' => $idUser
)
);
}
} else {
$form->setDescription('There was an error. Try to log in once again please');
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
$this->view->form = $form;
}
On the page I can see only :  and I do not know what it means as I check that redirecting in different Controller is working what mean that my project see the zend libraries so I can not understand why it does not create the form in the view ?
The view:
<?php $this->headTitle('Login'); ?>
<h1>Login</h1>
<?php echo $this->form->setAction($this->url()); ?>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只需在服务器上复制您的项目并将域目录指针设置为公共文件夹即可。在大多数情况下,这应该可以完成工作。
另一种方法是设置 vhost 文件并设置 文档根目录。如果您希望可以通过子域访问 zf 项目,则需要此选项。
但这更多的是一个服务器配置问题。
Application.ini:
.htaccess:
我希望您没有更改index.php文件,因为您不应该:
Simply copy your project on your server and set the domain directory pointer to the public folder. In most cases that should do the job.
Another approach is to setup a vhost file and set the document root. You need this if you want a zf project to be accessible with a subdomain.
But this is more a server configuration question.
Application.ini:
.htaccess:
I hope you didn't change the index.php file because you shouldn't: