Browse Source

Proper error when rewrite fails during install.

When Curl tries to fetch the rewrite test URL and something goes wrong the user
has no clue what was the problem. This problems can include:
- The rewriting not working at all.
- HTTPS redirects do not work.
- Curl does not accept the presented SSL cert.

This commit fixes this by providing the Curl error message to the user to further
debug the problem.

Fixes #3629.~
pull/4939/head
Andreas Neustifter 3 years ago
parent
commit
70a781fa5a
  1. 19
      mod/install.php
  2. 10
      src/Util/Network.php
  3. 3
      view/install/style.css
  4. 8
      view/templates/install_checks.tpl

19
mod/install.php

@ -303,12 +303,13 @@ function install_content(App $a) {
* required : boolean
* help : string optional
*/
function check_add(&$checks, $title, $status, $required, $help) {
function check_add(&$checks, $title, $status, $required, $help, $error_msg = "") {
$checks[] = [
'title' => $title,
'status' => $status,
'required' => $required,
'help' => $help,
'error_msg' => $error_msg,
];
}
@ -489,18 +490,24 @@ function check_smarty3(&$checks) {
function check_htaccess(&$checks) {
$status = true;
$help = "";
$error_msg = "";
if (function_exists('curl_init')) {
$test = Network::fetchUrl(System::baseUrl()."/install/testrewrite");
$test = Network::fetchUrlFull(System::baseUrl()."/install/testrewrite");
if ($test != "ok") {
$test = Network::fetchUrl(normalise_link(System::baseUrl()."/install/testrewrite"));
$url = normalise_link(System::baseUrl()."/install/testrewrite");
if ($test['body'] != "ok") {
$test = Network::fetchUrlFull($url);
}
if ($test != "ok") {
if ($test['body'] != "ok") {
$status = false;
$help = L10n::t('Url rewrite in .htaccess is not working. Check your server configuration.');
$error_msg = [];
$error_msg['head'] = L10n::t('Error message from Curl when fetching');
$error_msg['url'] = $test['redirect_url'];
$error_msg['msg'] = $test['error'];
}
check_add($checks, L10n::t('Url rewrite is working'), $status, true, $help);
check_add($checks, L10n::t('Url rewrite is working'), $status, true, $help, $error_msg);
} else {
// cannot check modrewrite if libcurl is not installed
/// @TODO Maybe issue warning here?

10
src/Util/Network.php

@ -36,7 +36,13 @@ class Network
*/
public static function fetchUrl($url, $binary = false, &$redirects = 0, $timeout = 0, $accept_content = null, $cookiejar = 0)
{
$ret = self::curl(
$ret = fetchUrlFull($url, $binary, $redirects, $timeout, $accept_content, $cookiejar);
return($ret['body']);
}
public static function fetchUrlFull($url, $binary = false, &$redirects = 0, $timeout = 0, $accept_content = null, $cookiejar = 0)
{
return self::curl(
$url,
$binary,
$redirects,
@ -45,8 +51,6 @@ class Network
'cookiejar'=>$cookiejar
]
);
return($ret['body']);
}
/**

3
view/install/style.css

@ -32,6 +32,9 @@ td.help {
td.help blockquote {
margin-left: 60px;
}
.error_header {
margin-left: 60px;
}
input[type="submit"] {
margin: 2em 0;
}

8
view/templates/install_checks.tpl

@ -16,7 +16,13 @@
{{/if}}
</td><td>{{if $check.required}}(required){{/if}}</td></tr>
{{if $check.help}}
<tr><td class="help" colspan="3"><blockquote>{{$check.help}}</blockquote></td></tr>
<tr><td class="help" colspan="3">
<blockquote>{{$check.help}}</blockquote>
{{if $check.error_msg}}
<div class="error_header"><b>{{$check.error_msg.head}}</br><a href="{{$check.error_msg.url}}">{{$check.error_msg.url}}</a></b></div>
<blockquote>{{$check.error_msg.msg}}</blockquote>
{{/if}}
</td></tr>
{{/if}}
{{/foreach}}
</table>

Loading…
Cancel
Save