PHP - поиск совпадений строк в переменной

Прежде всего:

1) .Shutdown WAMP и перейдите к C:\wamp\scripts\config.inc.php, перейдите из массива libeay32.dll, ssleay32.dll, строк 133,139

2). Установите OpenSSL из официальный сайт, обратите внимание на версию вашей ОС x64 или нет.

Командная строка:

3). cd C:\wamp\bin\apache\apache2.4.23\bin

4). openssl req -new > localhost.csr

5). openssl rsa -in privkey.pem -out localhost.key

6). openssl x509 -in localhost.csr -out localhost.crt -req -signkey localhost.key -days 365 -sha256 -extfile v3.ext

Обновление: из Chrome 58 нам нужно предоставить Subject Alternative Name. Это имя мы можем получить из файла расширения v3.ext:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = 127.0.0.1
DNS.2 = localhost

Очень важно в Common Name вставить 'localhost'

7) .Grab localhost.key и localhost.crt и установите их в C:\wamp\bin\apache\apache2.4.23\conf\key (обязательно, прежде чем создать соответствующий каталог)

Конфигурация:

8) .enable в C:\wamp\bin\apache\apache2.4.23\bin\php.ini и

C:\wamp\bin\php\php5.6.25\php.ini extension=php_openssl.dll

9). перейти к C:\wamp\bin\apache\apache2.4.23\conf\httpd.conf и раскомментировать:

LoadModule ssl_module modules/mod_ssl.so,

Include conf/extra/httpd-ssl.conf,

Include conf/extra/httpd-vhosts.conf,

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 

10). перейдите к C:\wamp\bin\apache\apache2.4.23\conf\extra\httpd-ssl.conf

и внесите изменения:

SSLSessionCache "shmcb:c:/wamp/bin/apache/apache2.4.23/logs/ssl_scache(512000)",

SSLSessionCacheTimeout 300,

VirtualHost _default_:443,

DocumentRoot "c:/wamp/www/",

ServerName localhost:443,

ErrorLog "c:/wamp/bin/apache/apache2.4.23/logs/ssl_error.log"

, (создать файл, если он не существует)

TransferLog "c:/wamp/bin/apache/apache2.4.23/logs/access.log",

SSLCertificateFile "c:/wamp/bin/apache/apache2.4.23/conf/key/localhost.crt",

SSLCertificateKeyFile "c:/wamp/bin/apache/apache2.4.23/conf/key/localhost.key",

<Directory "c:/wamp/www/">
    SSLOptions +StdEnvVars
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require local
</Directory>

,

  CustomLog "c:/wamp/bin/apache/apache2.4.23/logs/ssl_request.log"

Обработка сертификатов:

11). Нажмите Win + R и вставьте 'certmgr.msc', import servercert.crt в «Доверенные корневые сертифицированные органы»

12). Проверьте свой сервер в командной строке: «httpd -t» должен быть «Синтаксис OK»

13). Запустите Wamp и перейдите к ссылке https://localhost

Я надеюсь, что это поможет

Примечание: прочитайте эту статью о поведении Mozilla:

https://blog.mozilla.org/security/2014/09/23/phasing-out-certificates-with-sha-1-based-signature-algorithms/
0
задан RiggsFolly 16 January 2019 в 14:18
поделиться

3 ответа

Если вы сопоставляете подстроки, вы всегда должны искать более длинное совпадение, а не более короткое:

if (strpos($dir, "ComputerScience") !== FALSE) {
    $sql = "UPDATE documents 
                SET subject = 'ComputerScience' 
            WHERE documentname='".$dir."'";
    mysqli_query($link,$sql);
} elseif (strpos($dir, "Science") !== FALSE) {
    $sql = "UPDATE documents 
                SET subject = 'Science' 
            WHERE documentname='".$dir."'";
    mysqli_query($link,$sql);
}

Вы можете сократить код, предварительно сохранив совпадения в массиве:

$matches = ['ComputerScience', 'Science'];
foreach ($matches as $match) {
    if (strpos($dir, $match) !== FALSE) {
        $sql = "UPDATE documents 
                    SET subject = '$match' 
                WHERE documentname='$dir' ";
        mysqli_query($link, $sql);
        break;
    }
}

Опять же, более длинное совпадение идет первым в массиве. Вы также можете использовать интерполяцию строк для облегчения чтения SQL.

0
ответ дан Guillermo Phillips 16 January 2019 в 14:18
поделиться

В идеале вы должны добавить разделители каталогов, чтобы избежать этих проблем:

if (strpos($dir, "/ComputerScience/") !== FALSE) {
}
if (strpos($dir, "/Science/") !== FALSE) {
}

Замените / фактическим разделителем каталогов для вашей файловой системы (\ или /).

0
ответ дан Salman A 16 January 2019 в 14:18
поделиться
$subject = FALSE !== strpos($dir, "ComputerScience") ? 'ComputerScience' : (FALSE !== strpos($dir, "Science") ? 'Science' : null);

if (null !== $subject) {
    $my_full_path= $dir;
    $sql = "UPDATE documents 
                SET subject = '$subject' 
            WHERE documentname='".$dir."'";
    mysqli_query($link,$sql);
}

также было бы хорошо использовать подготовленное заявление. Они указывают на то, что приведенный выше код уменьшает шаблон, потому что вам не нужно писать похожий код с выполнением запросов дважды. То же самое можно сделать с помощью решения @Salman A. Это просто еще один вариант с троичными операторами.

0
ответ дан Robert 16 January 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: