Member 13368943 Ответов: 1

Не удалось загрузить ресурс: сервер ответил статистикой 405 (метод не разрешен)


В настоящее время я получаю эту ошибку: :60018/server.php не удалось загрузить ресурс: сервер ответил со статусом 405 (метод не разрешен)

Я не очень хорошо знаком с php-кодом, так как это код, который мой друг написал некоторое время назад для проекта, над которым мы работали, и я хотел немного поработать над этим проектом самостоятельно и сделать его лучше. Но я не уверен, что делает это возможным, я пытался найти материал об этом, но, честно говоря, раньше не использовал php. Код приведен ниже, любая помощь и идеи будут оценены по достоинству. И если это имеет значение, я запускаю этот проект на Visual Studios 2015

$ids = buildFinalList();
echo json_encode($ids);

function buildFinalList() {
    $conn = dbConnect();
    $type = 'themoviedb';
    $input = json_decode(file_get_contents('php://input'), true);
    $genre = $input['genres'];
    $sources = $input['sources'];
    $page = 1;

    $result = array();

    while (count($result) <= 2) {

        $currentPage = generateList($genre, $page++);
        $idChecked = idCheck($conn, $currentPage, $type);
        $sourceChecked = sourceCheck($conn, $idChecked, $sources);
        $result = calcRating($sourceChecked, $result);
    }

    $conn->close();

    $filmIDs = array();

    foreach ($result as $key => $value) {
        array_push($filmIDs, $key);
    }

    return $filmIDs;
}

function generateList($genreID, $pageNum) {
    $usURL = "http://api.themoviedb.org/3/discover/movie?";
    $apiKey = "api_key=9372ef92347b5703a397967af35f6c1c";
    $genre = "&with_genres=" . $genreID;
    $page = "&page=" . $pageNum;
    $votes = "&vote_count.gte=50";
    $endURL = "&sort_by=vote_average.desc";
    $data1 = json_decode(file_get_contents($usURL.$apiKey.$genre.$page.$votes.$endURL), true);
    $data2 = $data1['results'];
    $ids = array();
    foreach ($data2 as $result) {
        array_push($ids, $result['id']);
    }
    return $ids;
}

function dbConnect() {
    $conn = new mysqli("localhost", "root", "", "movies");
    if ($conn->connect_error) {
        exit("Server connection error");
    }
    return $conn;
}

function idCheck($conn, $ids, $type) {

    $results = array();

    foreach ($ids as $id) {
        //database check
        $query = "SELECT * FROM `filmids` WHERE ".$type."=\"".$id."\"";
        $result = $conn->query($query);

        if ($result->num_rows == 0) {
            $guideCall = json_decode(file_get_contents
            ('http://api-public.guidebox.com/v1.43/US/rKs3n3vENgt7CQC6D2W8y8tQYtrVoaAx/search/movie/id/'
                .$type.'/'.$id), true);

            if (empty($guideCall) || empty($guideCall['imdb'])){
                continue;
            } else {
                $in = "INSERT INTO `filmids` (`imdb`, `themoviedb`, `guide`) VALUES (\""
                    .$guideCall["imdb"]."\", \"".$guideCall["themoviedb"]."\", \""
                    .$guideCall["id"]."\")";
                $conn->query($in);
                $out = "SELECT * FROM `filmids` WHERE ".$type."=\"".$id."\"";
                $result = $conn->query($out);
                array_push($results, $result->fetch_assoc());
            }
        } else {
            array_push($results, $result->fetch_assoc());
        }
    }

    return $results;
}

function sourceCheck($conn, $ids, $sources) {

    $validFilms = array();

    foreach ($ids as $film) {
        $query = "SELECT * FROM `sources` WHERE id=".$film['id'];
        $result = $conn->query($query);

        if ($result->num_rows == 0) {
            $addRow = "INSERT INTO `sources`(`id`) VALUE (".$film['id'].")";
            $conn->query($addRow);

            $guideCall = json_decode(file_get_contents
            ('http://api-public.guidebox.com/v1.43/US/rKs3n3vENgt7CQC6D2W8y8tQYtrVoaAx/movie/'
                . $film['guide']), true);

            $webSources = $guideCall['subscription_web_sources'];
            $trueSources = array();

            foreach ($webSources as $webSource) {
                array_push($trueSources, $webSource['source']);
            }

            foreach ($trueSources as $trueSource) {
                $query = "UPDATE `sources` SET `".$trueSource."` = \"".$trueSource."\" WHERE `id`=".$film['id'];
                $check = $conn->query($query);
                if ($check) {
                    continue;
                } else {
                    $conn->query("ALTER TABLE `sources` ADD `".$trueSource."` VARCHAR(255)");
                    $conn->query($query);
                }
            }

            if (count(array_diff($sources, $trueSources)) < count($sources)) {
                array_push($validFilms, $film);
            }

        } else {
            if (count(array_diff($sources, $result->fetch_assoc())) < count($sources)) {
                array_push($validFilms, $film);
            }
        }
    }
    return $validFilms;
}

function calcRating($films, $sorted) {

    foreach ($films as $film) {

        $OMDb = json_decode(file_get_contents("http://www.theimdbapi.org/api/movie?movie_id=".$film['imdb']), true);

        $rating = ($OMDb['rating']);

        $film['rating'] = $rating;

        $sorted[$film['imdb']] = $rating;

    }

    arsort($sorted);

    return $sorted;

}


Что я уже пробовал:

Я правильно установил и настроил php и IIS, убедился, что обработчики разрешили метод POST, как и следовало, добавил тип. php MIME как в диспетчере IIS, так и в файле applicationhost. config

Richard MacCutchan

Какая строка вызывает ошибку?

Member 13368942

Сначала он не дает мне строку для erorr, он просто говорит, что ошибка находится в serber.php файл. Однако после добавления типа MIME телефона, теперь, когда он дает мне 405 erorr, он говорит, что ошибка: "angular.js:11756 POST localhost:60018/server.php 405 (метод не разрешен)"

Richard MacCutchan

Таким образом, это говорит вам о том, что ваш сервер не может обработать запрос, который вы пытаетесь отправить. Вам нужно изучить детали запроса и понять, почему сервер отклоняет его.

Member 13368942

Я понятия не имею, как заглянуть в детали запроса, чтобы понять, почему сервер его отклонит

Richard MacCutchan

Ну, это то, что вам нужно узнать, если вы стремитесь стать разработчиком программного обеспечения.

Member 13368942

Я понимаю, что было бы неплохо знать, как это сделать, если мне когда-нибудь понадобится работать с сервером, но в настоящее время я не знаю, как это сделать, так что не забудьте помочь мне разобраться в этом

Richard MacCutchan

Извините, но на то, о чем вы спрашиваете, невозможно ответить. У вас есть доступ ко всей информации, необходимой для того, чтобы узнать, что происходит в ваших системах; у нас нет.

Member 13368942

Возможно, у меня есть доступ к этой информации, но я понятия не имею, как я получу доступ к этой информации. Я буквально только с помощью Visual студии экспресс служб IIS для того, чтобы запустить приложение. Ошибка возникает в конце, когда PHP должен быть запущен, и ничего не возвращается. Когда я проверяю консоль, я получаю ошибку 405, но я понятия не имею, куда идти, чтобы найти подробную информацию о том, почему сервер не может обработать этот запрос.

Richard MacCutchan

Ну, поскольку у нас нет доступа к вашей системе, мы больше ничем не можем вам помочь. Вы можете попробовать прочитать документацию IIS, чтобы узнать, есть ли в ней какие-либо полезные рекомендации.

Member 13368942

У меня есть обновление по этому вопросу, если это вообще поможет. Если я просто пойду к http://localhost в google chrome я получаю обычную страницу IIS, которая должна загружаться, если она установлена правильно. Затем, если я попытаюсь ввести http://localhost/phpinfo.php он не открывает страницу, а скорее загружает phpinfo.php вместо этого файл. Есть ли какая-то причина, по которой вы могли бы подумать об этом? Я просто сделал новую установку php, прежде чем попробовать это, и прошел через инструкции по установке.

Richard MacCutchan

Все зависит от того, что содержится в этом файле. Что в первых строках?

Member 13368942

Это просто тестовый файл php, который имеет <? phpinfo(); ?>

Richard MacCutchan

Ну, браузер ничего не может с этим поделать, так как это не HTML.

Member 13368942

ГМ, если php настроен правильно, то он должен дать вам красиво отформатированную информационную страницу о вашей установке php, то есть смысл добавить эту строку кода в файл, обычно именуемый phpinfo.php, в папку wwwroot, а затем пытается получить к ней доступ с помощью localhost

Richard MacCutchan

Где ты это вычитал?

Member 13368942

Это с веб-сайта Microsoft

Member 13368942

https://docs.microsoft.com/en-us/iis/application-frameworks/scenario-build-a-php-website-on-iis/configuring-step-1-install-iis-and-php

Richard MacCutchan

Я думаю, вам нужно задать вопрос Microsoft.

Member 13368942

Что это вообще значит? Извините, но вы сказали, что ничего не должны делать, так что вы, должно быть, ошибаетесь, поскольку я считаю, что Microsoft над вами, без обид. Похоже, от тебя не будет никакой помощи, поскольку ты сказал, что это ничего не даст, когда на самом деле будет.

Member 13368942

Чтобы проверить вашу установку PHP
Откройте текстовый редактор, например блокнот, от имени администратора.
В новом файле введите следующий текст: <? php phpinfo(); ?>
Сохраните файл как C:\inetpub\wwwroot\Phpinfo.php.
Откройте браузер и введите следующий URL-адрес: http://localhost/phpinfo.php
Отображается красиво отформатированная веб-страница с текущими настройками PHP.

Richard MacCutchan

И так ли это? И откуда у вас эта информация?

Member 13368942

Дело в том, что он не отображает хороший pdge, как он говорит, что это должно быть, он загружает файл. php, о котором я уже говорил вам

Member 13368942

И разве это не говорит то же самое, что делает страница microsoft, например, 2 на сайте, на который вы только что указали?

Member 13368942

Как обновление ситуации, у меня действительно есть страница phpinfo, работающая сейчас (и, как я и Microsoft сказали, весь файл. php говорит, что это <? php phpinfo ();? > И это дает мне хорошую отформатированную страницу с моими настройками php), но я все еще получаю ошибку 405 при попытке запустить php на моем visual studios IIS.

Richard MacCutchan

Я только что настроил IIS и установил PHP в соответствии с инструкциями Microsoft, и все, похоже, работает нормально. Проверяя установку я нашел следующий каталог: C:\inetpub\logs, где вы, скорее всего, найдете больше информации о своей ошибке.

Member 13368942

Вы пробовали запустить php-страницу в visual studio? Вот где моя ошибка, а не с установкой телефона, как у меня сейчас работает

Richard MacCutchan

У меня нет установленных шаблонов веб-разработчиков, поэтому я не могу это проверить.

Member 13368942

вот где я получаю ошибку, хотя и в Visual Studio. Так что ничего хорошего, если все остальное работает с IIS и PHP, если оно не работает в Visual Studios, а это не так. Я сомневаюсь, что какие-либо журналы ошибок для ошибок visual studio 405 будут храниться в этом месте

Richard MacCutchan

Журналы ошибок будут находиться на сервере IIS; именно там генерируется ошибка.

Mohibur Rashid

Ваша функция file_get_contents выглядит подозрительно

Member 13368942

Что заставляет file_get_contents выглядеть подозрительно? Помните, что это не мой телефонный код, это друзья, которые были написаны некоторое время назад в групповом проекте, поэтому у меня ограниченные знания php.

1 Ответов

Рейтинг:
1

Patrice T

Взгляните на сервер, там должен быть какой-то отчет об ошибке, включая такие детали, как положение ошибки.
----
Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]


Member 13368942

Я не знаю, что вы имеете в виду, когда смотрите на сервер. Я запускаю приложение в Visual Studios, нажимая кнопку IIS Express, которая открывает веб-сайт в chrome, а затем, когда я добираюсь до того места, где должен быть загружен php, он выдает мне ошибку 405 в консоли. Мне сказали, что где-то еще кажется, что мой сервер не распознает php, но я не уверен, почему, так как я следовал шагам установки php несколько раз, и это все еще не сработало.

Patrice T

Часть IIS, имитирующая ваш сервер.
Там должен быть какой-то журнал ошибок, где IIS скажет вам, что не так.

Member 13368942

Я понятия не имею, как я найду это бревно