Просмотров: 35156
Дата последнего изменения: 22.07.2020
Сложность урока:
3 уровень — средняя сложность. Необходимо внимание и немного подумать.
4
5
Ошибка сервера может быть вызвана различными причинами, поэтому ее диагностика достаточно сложна и трудоемка. Это не является ошибкой «1С-Битрикс: Управление сайтом». Она часто возникает на разделяемом хостинге из-за ограничения ресурсов системы.
При возникновении ошибки сервера в первую очередь необходимо просмотреть файл сервера error.log. В этом файле может содержаться строка с кодом ошибки.
-
Типичным примером причины возникновения ошибки сервера может быть превышение разрешенных прав на хостинге.
Например, происходит попытка выполнить файл с атрибутами, не разрешёнными для запуска на сервере (например, файл имеет атрибуты 0755, а допускается 0711).
- Также возможной причиной может быть наличие лимита по времени на исполнение php-скриптов;
- Или у системы нет прав на запись или чтение файла и др.
-
Другой распространенной причиной возникновения внутренней ошибки сервера является нарушение конфигурации сервера или попытка использования неразрешенных инструкций, например, в файле
.htaccess
. В этом случае необходимо закомментировать либо удалить строку, содержащую неразрешенную директиву, в соответствующем файле (например,.htaccess
). - Обратите внимание, если PHP работает как CGI, то 500 ошибка на сервере может быть вызвана фатальной ошибкой PHP. В этом случае рекомендуется выполнить проверку программного кода и диагностировать ошибку.
- Внутренняя ошибка сервера может возникнуть при запуске из-под Apache CGI-скрипта, время исполнения которого превышает время, отведенное на выполнение скрипта в настройках сервера.
Таким образом, всё зависит от конфигурации сервера.
Важно понимать, указанные ограничения не настраиваются через настройки PHP в php.ini
.
В нормальной ситуации такая ошибка и её причина фиксируется в логах сервера. В этом случае пользователю рекомендуется обратиться к хостеру с просьбой указать, что является причиной возникновения ошибки и попросить её устранить (например, увеличить ресурсы). Если хостер не смог найти решение — обратитесь в техподдержку компании «1С-Битрикс» с точным указанием того, как ошибка происходит и какие причины указал хостер. Без указания причины ошибки техподдержка помочь вам не сможет.
Я из базы достаю записи определенного пользователя. При желании пользователь может оставить комментарий к записи. Есть кнопка «Добавить комментарий», при нажатии на которую вываливается textarea с кнопкой «Добавить». Вот все это хочу сделать ajaxom. Текст из textarea я получаю, но все это дело в бд не попадает.
Вот скрипт:
$('.comment').click(function(){
var id_advert = $(this).val();
//console.log(id_advert);
$(this).html("<textarea rows=10 cols=70 name='add_comment' class='add_comment' maxlengh='256' autofocus> </textarea><br><button type='submit' name='add' class='add'> Добавить сообщение</button>");
$.get('edit_advert',{comment:id_advert},function()
{
$('.add').click(function(){
var params = $('.add_comment').serialize();
console.log(params);
console.log($.post('add_comment',params));
});
});
});
Вот метод, который должен все это обрабатывать:
public function edit_advert(Request $request)
{
$id_advert = $_GET['comment'];
$id_client = Auth::user()->id;
$comment = $request->input('add_comment');
Adverts::add_comment($comment,$id_client,$id_advert);
}
Вьюшка:
<div class="panel-body">
@foreach ($remember_adverts_client as $advert)
<div class="table table-bordered">
Объявление добавлено <em> {{$advert->date}} </em> <br>
<strong>{{$advert->title}}</strong><br>
<strong>Тип недвижимости: </strong>{{$advert->type}}<br>
<strong>Количество комнат: </strong>{{$advert->quantity_room}}<br>
<strong>Город: </strong>{{$advert->city}}<br>
<strong> Описание: </strong> {{$advert->description}}<br>
<strong> Телефон: </strong>{{$advert->phone}}<br>
<!--<form action="edit_advert" method="GET"> -->
<button type="submit" value="{{$advert->id_realty}}" name="comment" class="comment"> Добавить комментарий</button>
<button type="submit" value="{{$advert->id_realty}}" name="cross"> Перечеркнуть </button>
<button type="submit" value="{{$advert->id_realty}}" name="lead">Обвести</button>
<button type="submit" value="{{$advert->id_realty}}" name="link">Поделиться ссылкой</button>
<!--</form> -->
@endforeach
И роут:
Route::get('edit_advert','ClientController@edit_advert');
Route::post('add_comment','ClientController@edit_advert')
В чем может быть проблема?
I am receiving an internal server error, status 500 and I don’t know how to troubleshoot. I have added error catch for the ajax call but doesn’t tell me much. How do I add code to understand what is going on inside the requesting file? I have tried doing a var_dump()
but nothing happends.
$('#createpanelbutton').live('click', function(){
var panelname = $('#panelname').val();
var user_cat = $('#user_cat').val();
//var whocan = $('#whocan').val();
var errors='';
if(panelname=='')
errors+='Please enter a Brag Book name.<br/>';
if(user_cat=='0')
errors+='Please select a category.<br/>';
if(errors!=''){
$('#panel_errors2').html('<span class="panel_brag_errors">'+errors+'</span>');
return false;
}else{
$('#createpanelbutton').val('Creating Brag Book...');
$.ajax({
async:false,
dataType:'json',
type: 'POST',
url:baseurl+'createpanel.php',
error:function(data,status,jqXHR){ alert("handshake didn't go through")},
data:'name='+encodeURIComponent(panelname)+'&category='+encodeURIComponent(user_cat)+'&collaborator='+encodeURIComponent('me'),
success:function(response){
if(response.status=='success')
location.href=response.url;
if(response.status=='failure')
$('#panel_errors2').html('<span class="panel_brag_errors">'+response.message+'</span>');
}
});
}
});
Ajax call to to php file createpanel.php:
<?php
include_once('s_header2.php');
if($_POST){
if($_POST['name'] == ''){
$msg = "Please enter Brag Book name.";
$result = array("status"=>'failure', "message"=>$msg);
}elseif($_POST['category'] == ''){
$msg = "Please select category.";
$result = array("status"=>'failure', "message"=>$msg);
}else{
$db = Core::getInstance();
$dbUp = $db->dbh->prepare("SELECT id FROM ".USERS_PANEL." WHERE user_id = :uID and title = :tit");
$result = '2';
$dbUp->execute(array(':uID'=>$_SESSION['sesuid'],':tit'=>$_POST['name']));
$result = '3';
$numrows = $dbUp->rowCount();
$result = '4';
if($numrows == 0){
$result = '5';
$dbIn = $db->dbh->prepare("INSERT INTO ".USERS_PANEL." (`user_id`,`title`,`category_id`,`desc`,`type`,`friend_id`) VALUES (?, ?, ?, ?, ?, ?)");
$dbIn->execute(array($_SESSION['sesuid'],$_POST['name'],$_POST['category'],$_POST['panel_desc'],$_POST['collaborator'],$_POST['jj']));
$lid = $db->dbh->lastInsertId();
//header("Location: ".BASE_URL.addslashes($_POST['bname'])."-".$lid."/");
$panelurl=BASE_URL.$_POST['name']."-".$lid."/";
$result = array("status"=>'success', "url"=>$panelurl, "name"=>$_POST['name'], "id"=>$lid);
}else{
$result = array("status"=>'failure', "message"=>'You already have a Brag Book with that name.');
}
}
}
echo json_encode($result) ;die;
?>
Я новичок в AJAX, и я просто пробовал некоторые примеры AJAX, но я получаю эту 500 Внутренняя ошибка сервера. Я ищу в Интернете решение, но ничего не получается. Тем не менее, если я изменить тип с POST на GET, он работает нормально.
контроллер:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class testingAjax extends CI_Controller
{
public function index()
{
$this->load->view('testingAjax_view');
}
public function getSomething()
{
$values = $this->input->post('testing');
echo $values;
}
}
JS скрипт
$(document).ready(
function ()
{
$('#callBackBtn').click(function()
{
jQuery.ajax({
type: "POST",
url: "testingAjax/getSomething",
data: {testing: "testing"},
success: function(data) {
$('#responseText').val(data);
},
error: function(xhr, text_status, error_thrown){
alert(error_thrown);
}
})
});
}
);
Посмотреть
<body>
<h3>Testing Ajax</h3>
<div class="entry-wrapper">
<input type="text" id="input_text">
<input type="button" value="Ajax Call Back" id="callBackBtn"/>
</div>
<div class="response_wrapper">
<textarea id="responseText"></textarea>
</div>
</body>
Я запускаю это на xammp. Ниже приведены журналы ошибок Apache (не уверен, полезны они или нет)
[Wed May 13 00:31:53.251642 2015] [core:notice] [pid 25716:tid 456] AH00094: Command line: 'c:\\xampp\\apache\\bin\\httpd.exe -d C:/xampp/apache'
[Wed May 13 00:31:53.257646 2015] [mpm_winnt:notice] [pid 25716:tid 456] AH00418: Parent: Created child process 25724
[Wed May 13 00:31:57.895294 2015] [ssl:warn] [pid 25724:tid 460] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Wed May 13 00:31:59.065692 2015] [ssl:warn] [pid 25724:tid 460] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Wed May 13 00:31:59.205786 2015] [mpm_winnt:notice] [pid 25724:tid 460] AH00354: Child: Starting 150 worker threads.
Firebug показал ошибку:
POST http://localhost/ias/testingAjax/getSomething
500 Internal Server Error
30ms
1
Решение
Попробуй с
url:"/testingAjax/getSomething".
Для вызова ajax метод по умолчанию GET
а ты не публиковал form
или любое значение для сервера, просто сделать ajax-вызов по нажатию кнопки, поэтому это может сработать !!! когда вы изменили тип метода с POST
в GET
но прежде всего я думаю, что вы должны исправить url
Метод (по умолчанию: «GET»)
Тип: String Метод HTTP, используемый для
запрос (например, «POST», «GET», «PUT»)
увидеть больше здесь http://api.jquery.com/jquery.ajax/
1
Другие решения
Я создал свежую копию вашей работы, а здесь простую, которой вы могли бы следовать.
Во-первых, правильно настроить ваш проект.
Сначала я создаю файл .htaccess в корневой папке той же директории, что и index.php, чтобы создать красивый URL
Вот простой файл содержимого .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
</IfModule>
И вам нужно включить расширение / настройку mod_rewrite вашего сервера
Вы можете включить его, найдя appache / httpd.conf
и найдите «LoadModule rewrite_module modules / mod_rewrite.so»
удалите # и сохраните и перезапустите приложение.
Следующим шагом является включение помощника URL
на
приложение / Config / autoload.php
$autoload['helper'] = array('url');
использовать url helper, созданный CI;
Увидеть URL HELPER
Далее нужно настроить контроллер по умолчанию, чтобы сделать это
приложение / Config / routes.php
$route['default_controller'] = 'testingAjax';
Контроллер testingAjax.php
<?php
class testingAjax extends CI_Controller
{
public function index()
{
$this->load->view('testingAjax_view');
}
public function getSomething()
{
$values = $this->input->post('testing');
echo $values;
}
}
Представление testingAjax_view.php
<html>
<head>
<script type="text/javascript">
// get the base url of the project
var BASE_URL = "<?php echo base_url(); ?>";
</script>
</head>
<body>
<h3>Testing Ajax</h3>
<div class="entry-wrapper">
<input type="text" id="input_text">
<input type="button" value="Ajax Call Back" id="callBackBtn"/>
</div>
<div class="response_wrapper">
<textarea id="responseText"></textarea>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready( function() {
$('#callBackBtn').on('click', function(){
$.ajax({
type: "POST",
url: BASE_URL + "testingAjax/getSomething",
data: {testing: $('#input_text').val()},
success: function(data) {
$('#responseText').val(data);
},
error: function(xhr, text_status, error_thrown){
alert(error_thrown);
}
});
// But if you cannot setup the pretty url
// using .htaccess
// then you can use the
// BASE_URL+ "index.php/" + "testingAjax/getSomething
});
});
</script>
</body>
</html>
1
Просто поместите это в ваш файл .htaccess, который находится в вашем корневом каталоге:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Замечания:
RewriteBase /
здесь важно
0
Рассказываем, как устранить 500 ошибку на сайте на 1С-Битрикс.
«Internal Server Error» — внутренняя ошибка сервера. Она может произойти и на сайте на CMS 1С-Битрикс, WordPress и других. Само название говорит о том, что дело в хостинге.
«Internal Server Error» выводит код ответа 500, а ошибки вызваны проблемами в файлах сайта:
Если проблема в файле .htaccess, при переходе на сайт появится сообщение «Internal server error».
До начала работы над устранением ошибки нужно выяснить причину ее возникновения. Для начала проверьте доступное ОЗУ.
Шаг №1. Проверка доступной оперативной памяти (ОЗУ)
-
Если у вас виртуальный хостинг
На тарифах виртуального хостинга оперативная память общая для всех сайтов. Если один из сайтов превысил лимит, системный администратор отправляет ему уведомление для исправления ситуации.
-
Если у вас виртуальный сервер или выделенный сервер
Перейдите в панель управления виртуальным сервером. На панели меню слева перейдите в Инструменты (1) → Shell-клиент (2). В открывшейся вкладке введите команду «free -h» (3) и нажмите enter.
В столбце «used» (4) в первой строке указана используемая ОЗУ. На скриншоте это 398 МБ. В столбце «free» (5) в первой строке указана свободная ОЗУ. На скриншоте это 3,2 Гб.
Если оперативная память закончилась, возможно, причина в выполняющихся процессах на вашем сервере. Для исправления обратитесь к вашему программисту или в техническую поддержку хостинга.
Если оперативной памяти достаточно, переходите ко второму шагу.
Шаг №2. Проверка наличия ошибок в файле «.htaccess»
Для проверки ошибок в «.htaccess» достаточно просто изменить название этого файла и перейти на сайт. Если сайт начнет работать, в файле есть ошибки.
Для этого в панели управления виртуальным хостингом перейдите в Главное (1) → Менеджер файлов (2). Перейдите в корневую папку сайта (по умолчанию это «www»). Выделите файл «.htaccess» (3) и нажмите кнопку «Атрибуты» (4).
В строке «Имя» измените название — например, напишите «.htaccess_1». Нажмите «Ок», чтобы сохранить изменения.
Перейдите на сайт. Если он заработал, то проблема в файле. Вспомните, какие изменения вы вносили, и исправьте их. Либо восстановите файл из резервной копии.
Если сайт все еще не работает, верните прежнее имя файла «.htaccess» и перейдите к 3 шагу.
Шаг №3. Проверка наличия ошибок в скриптах сайта
Чтобы узнать, есть ли ошибки в скриптах сайта, нужно включить вывод ошибок на сайте. Для этого в менеджере файлов выделите файл «.htaccess» и нажмите кнопку «Открыть».
Вставьте строку «php_value display_errors 1» так, как показано на скриншоте ниже.
Перейдите на сайт. Если появились ошибки, сделайте скриншот экрана или скопируйте текст ошибок. Обратитесь в нашу техническую поддержку с указанием данных ошибок.
Если после выполнения этой инструкции исправить ошибку не получилось, оставьте обращение в нашу техническую поддержку. Поможем выяснить, в чем проблема, и исправить ее.