那里有大量的PHP框架; 有些相当不错,有些看起来很臃肿而且没必要.在观看了Rasmus Lerdorf关于Digg的PHP性能的演示之后,我更关注我选择用于构建应用程序的框架的性能.
我所知道的两个最流行的框架是CodeIgniter和CakePHP.根据我的理解,CakePHP是一个可怕的资源猪.那么CodeIgniter呢?我听说Zend Framework也不是那么苗条.
是否还有其他(更高性能)框架我应该感兴趣?根本不使用框架会更好吗?在选择PHP框架时应该考虑哪些因素?
求助:废话......为什么你总是在你最终决定寻求帮助之后找出正确的事情!
如果其他人遇到此问题,请尝试从/ usr/local/bin/php而不是/ usr/bin/php运行以获取codeigniter以获取URI段.
题
我有最新的codeigniter安装,一切似乎在本地工作正常.我最近将我的文件放在我的服务器上,除了我的cron命令之外的所有内容都正常.
当我尝试通过cron调用控制器时(如此处所述:http://codeigniter.com/user_guide/general/cli.html),我没有得到控制器.相反,我得到的输出只是我的默认控制器(登录页面).
这在本地运行良好,并且index.php被调用,因为我正在通过电子邮件发送默认页面的输出.
有人在这里问了一个类似的问题:CodeIgniter Cron Job on Shared Hosting? 响应者表示这是Cpanel的问题(我现在正在尝试使用它来设置cron作业),但是与我的托管服务提供商交谈,他们说整个命令正在运行.然而,CI并没有抓住控制器的URI.我还检查了以确保base_url设置正确(通过URL调用文件正常工作证明了这一点).
有什么想法吗?我似乎无法弄清楚为什么它在命令行格式时没有抓取URI:/ usr/bin/php index.php controller_class方法
当我在我的网站上输入一个不存在的URL时,它会将我带到routes.php中指定的404页面:
$route['404_override'] = 'page/not_found';
Run Code Online (Sandbox Code Playgroud)
因此,页面的设计就像我在"page"目录中的not_found.php视图中所做的那样.
但是,如果我使用此函数手动强制执行404:
show_404();
Run Code Online (Sandbox Code Playgroud)
它带我到没有样式的默认CodeIgniter 404页面:
404 Page Not Found
The page you requested was not found.
Run Code Online (Sandbox Code Playgroud)
如何使其转到我在路由文件中指定的相同404页面?
我一直处理一个问题.如何在函数中使用重定向设置验证错误?这是我控制器中的代码:
function send()
{
$this->form_validation->set_rules('e-mail', 'Email', 'trim|required|valid_email');
$this->form_validation->set_rules('cellphone', 'Cellphone Number', 'trim|required|is_natural');
$this->form_validation->set_message('required', '%s is required.');
$this->form_validation->set_message('valid_email', '%s is not a valid Email Address');
$this->form_validation->set_message('is_natural', '%s can only contain numbers.');
$this->form_validation->set_error_delimiters('<li>', '</li>');
if($this->form_validation->run() == FALSE)
{
redirect ('/');
}
else
{
echo '<pre>';
print_r($_POST);
echo '<pre>';
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在视图文件中使用的代码:
<? if (validation_errors())
{
echo '<div id="validation_errors" title="Error:">';
echo '<div class="response-msgs errors ui-corner-all"><span>Errors:</span><br /><ul>';
echo validation_errors();
echo '</ul></div>';
echo '</div>';
}
?>
Run Code Online (Sandbox Code Playgroud) 在我的项目的消息系统,当你从一个用户的消息,你发送一个电子邮件警告说,其他用户发了一个信息给这里查看邮件点击(即帖子的网址),所以如果用户没有在系统登录他重定向到登录页面,登录后它应该回到referer url.我在核心文件夹中创建了一个basecontoller并扩展了CI_controller,验证代码如下所示.
function authenticate($type = 'user')
{
if($type == 'user')
{
if($this->user_id)
{
// user is logged in. check for permissions now
}
else
{
// user isnt logged in. store the referrer URL in a var.
if(isset($_SERVER['HTTP_REFERER']))
{
$redirect_to = str_replace(base_url(),'',$_SERVER['HTTP_REFERER']);
}
else
{
$redirect_to = $this->uri->uri_string();
}
redirect('user/login?redirect='.$redirect_to);
exit;
}
}
if($type == 'admin')
{
if($this->session->userdata('admin_id') && $this->session->userdata('user_type') ==5)
{
// Admin is logged in
}
else
{
redirect('admin/login');
exit;
}
}
}
Run Code Online (Sandbox Code Playgroud)
引荐网址为"http://example.com/project/pm/view_conversation?id=11"现在的问题是我得到引荐来源网址,直到view_conversation并没有能够得到的ID部分.
有什么建议吗?
谢谢.
我正在努力让用户能够生成发票和其他表格数据的PDF副本.为此,我将dompdf包装到一个可以与CI一起使用的库中,并创建了一个方法,该方法将根据CI的返回值生成PDF output->get_output().包装器类似于Github上的这个包装器.
问题是,我无法找到一种方法来将视图(以及PDF所需的HTML/CSS)转换为CI的输出类load->view(),而不是写入浏览器.
我唯一的另一个选择是使用curl来请求页面,但这似乎很愚蠢,因为我可以从输出缓冲区得到它.我只是不希望HTML发送到浏览器,因为我设置标题告诉浏览器期望PDF.
要清楚,这就是我想要完成的事情(按照我想要完成的顺序):
output->get_output()给我的dompdf库我没有看到基于输出类文档执行第2步的任何方法.
是否可以在不显示输出类的情况下获取视图?如果是这样,怎么样?我正在使用CI 2.0.3.
编辑
非常有帮助的Anthony Sterling指出,我可以通过设置第三个参数告诉它返回一个字符串而不是将视图渲染为TRUE来从loader类中得到我想要的东西.例如:
$lotsaHtml = $this->load->view('fooview', $somearray, TRUE);
Run Code Online (Sandbox Code Playgroud)
这在我的特定实例中会更好,因为我不需要加载部分.然而,这仍然是一个有效的(我认为)有趣的问题,知道我是否可以从OB得到相同的东西也是很方便的,也许如果我确实有一堆偏.那些可以连接起来,但是很糟糕.
看起来我应该能够让输出类不呈现任何东西(否则,为什么get_output()存在?)所以我可以用它知道的所有东西做其他事情.我找不到让这种情况发生的方法.
编辑2
一些伪(但不远离现实)的代码说明我希望做什么,通过展示我做了什么,然后解释我实际想做什么.
假设我genpdf($id)在使用名为invoice的模型命名的控制器中有一个公共方法inv:
public function genpdf($invoiceId) {
$this->load->library('dompdflib');
$this->pagedata['invoice_data'] = $this->inv->getInvoice($invoiceId);
$html = $this->load->view('pdfgen', $this->pagedata, TRUE);
$this->dompdflib->sendPdf($html);
}
Run Code Online (Sandbox Code Playgroud)
这几乎与我现在使用的代码相同.在那里,我要求加载器解析并将pdfgen视图的结果作为字符串给我,我将其传递给我的dompdf包装器中的函数,该函数设置标头并将PDF发送到浏览器.
只是通过获取输出缓冲区本身(在正确设置标头/等之后),这似乎很容易做到.
或者我只需要append_output()在每次加载部分时连续调用输出类?
加载过多模型的多个方法需要一起工作才能生成这些(它们是作为事后的想法进行的),所以我希望只收集它并直接从输出类中检索它.可能是我必须逐渐谈谈 …
我正在使用本教程,它提供了有关如何设置CodeIgniter和Doctrine的详细说明.我正在使用CodeIgniter 2.1.0和Doctrine 2.2.1,但是我收到此错误:
致命错误:
Doctrine\Common\Cache\apc_fetch()在第52行的/Applications/XAMPP/xamppfiles/htdocs/emma_watson_shrine/application/libraries/Doctrine/Common/Cache/ApcCache.php中调用未定义的函数
你能帮我吗?
我有一个带有文件字段的表单image,但不需要此字段.
当用户不选择表单中的任何文件时,do_upload()始终返回错误.
如何在控制器中执行上载操作之前检查用户是否选择了文件?
backbone.js当我尝试将模型保存到位于另一个主机/ URL上的restful Web服务时,我的应用程序抛出了HTTP OPTIONS not found错误.
根据我的研究,我从这篇文章中收集到:
请求将不断发送OPTIONS http请求标头,并且根本不会触发POST请求.
显然CORS的请求将"对用户数据产生副作用"将使您的浏览器"预检"带有OPTIONS请求标头的请求以检查批准,然后再实际发送您的预期HTTP请求方法.
我试图绕过这个:
Backbone.emulateHTTP = true;
我还允许在标题中允许所有CORS和CSRF选项.
header('Access-Control-Allow-Origin:*');
header("Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept"); header("Access-Control-Allow-Methods:GET,POST,OPTIONS");
当Backbone.emulateHTTP引入代码行时,应用程序崩溃了.
有没有办法在CodeIgniter RESTServer中响应OPTIONS请求,是否还有其他选择允许从谈话地点禁用此请求?
rest codeigniter backbone.js http-options-method codeigniter-restserver
嗨,我实际上是通过ajax将一个base64图像字符串发送到一个php脚本,它只解码字符串并将内容保存为.jpg文件.
但结果是空图像.
这怎么可能?
php脚本:
$uploadedPhotos = array('photo_1','photo_2','photo_3','photo_4');
foreach ($uploadedPhotos as $file) {
if($this->input->post('photo_1')){
$photoTemp = base64_decode($this->input->post('photo_1'));
/*Set name of the photo for show in the form*/
$this->session->set_userdata('upload_'.$file,'ant');
/*set time of the upload*/
if(!$this->session->userdata('uploading_on_datetime')){
$this->session->set_userdata('uploading_on_datetime',time());
}
$datetime_upload = $this->session->userdata('uploading_on_datetime',true);
/*create temp dir with time and user id*/
$new_dir = 'temp/user_'.$this->session->userdata('user_id',true).'_on_'.$datetime_upload.'/';
@mkdir($new_dir);
/*move uploaded file with new name*/
@file_put_contents( $new_dir.$file.'.jpg',$photoTemp);
}
Run Code Online (Sandbox Code Playgroud)
对于ajax来说没关系因为,echo $ photoTemp返回字符串.
我试过var_dump(@file_put_contents( $new_dir.$file.'.jpg',$photoTemp));,它返回,bool(true)因为图像被保存但图像中没有内容:(空图像
对于空图像,我的意思是,文件是创建和命名的,它与我传递给php的内容大小相同,但是当我尝试打开该图像进行预览时,文件无法打开,因为文件损坏或损坏类型格式
无论如何这是将照片作为base64并将其发送到php的JS:
<script type="text/javascript">
var _min_width = 470;
var _min_height = 330; …Run Code Online (Sandbox Code Playgroud) codeigniter ×10
php ×7
backbone.js ×1
base64 ×1
cakephp ×1
cpanel ×1
cron ×1
doctrine ×1
doctrine-odm ×1
doctrine-orm ×1
dompdf ×1
file-upload ×1
http-referer ×1
image ×1
rest ×1
save ×1
validation ×1