Get-Content (Microsoft.PowerShell.Management) — PowerShell | Microsoft Learn
- Ссылка
- Модуль:
- Microsoft.PowerShell.Management
Получает содержимое элемента в указанном расположении.
Синтаксис
Get-Content [-ReadCount <Int64>] [-TotalCount <Int64>] [-Tail <Int32>] [-Path] <String[]> [-Filter <String>] [-Include <String[]>] [-Exclude <String[]>] [-Force] [-Credential <PSCredential>] [-Delimiter <String>] [-Wait] [-Raw] [-Encoding <Encoding>] [-AsByteStream] [-Stream <String>] [<CommonParameters>]
Get-Content [-ReadCount <Int64>] [-TotalCount <Int64>] [-Tail <Int32>] -LiteralPath <String[]> [-Filter <String>] [-Include <String[]>] [-Exclude <String[]>] [-Force] [-Credential <PSCredential>] [-Delimiter <String>] [-Wait] [-Raw] [-Encoding <Encoding>] [-AsByteStream] [-Stream <String>] [<CommonParameters>]
Описание
Командлет Get-Content
получает содержимое элемента в расположении, указанном путем, например текст в файле или содержимое функции. Для файлов содержимое считывается по одной строке за раз и возвращает коллекцию объектов, каждый из которых представляет строку содержимого.
Начиная с PowerShell 3.0, Get-Content
можно также получить указанное количество строк в начале или конце элемента.
Примеры
Пример 1. Получение содержимого текстового файла
В этом примере возвращается содержимое файла в текущем каталоге. Файл LineNumbers.txt
содержит 100 строк в формате Это строка X и используется в нескольких примерах.
1..100 | ForEach-Object { Add-Content -Path .\LineNumbers.txt -Value "This is line $_." } Get-Content -Path .\LineNumbers.txt This is Line 1 This is Line 2 ... This is line 99. This is line 100.
Значения массива от 1 до 100 отправляются по конвейеру в ForEach-Object
командлет . ForEach-Object
использует блок скрипта с командлетом Add-Content
для создания LineNumbers.txt
$_
представляет значения массива по мере отправки каждого объекта в конвейер. Командлет Get-Content
использует параметр Path для указания LineNumbers.txt
файла и отображения содержимого в консоли PowerShell.Пример 2. Ограничение количества строк, Get-Content возвращаемых
Эта команда получает первые пять строк файла. Параметр TotalCount используется для получения первых пяти строк содержимого. В этом примере используется LineNumbers.txt
файл, созданный в примере 1.
Get-Content -Path .\LineNumbers.txt -TotalCount 5 This is Line 1 This is Line 2 This is Line 3 This is Line 4 This is Line 5
Пример 3. Получение определенной строки содержимого из текстового файла
Эта команда получает определенное количество строк из файла, а затем отображает только последнюю строку этого содержимого. Параметр TotalCount получает первые 25 строк содержимого. В этом примере используется LineNumbers.txt
файл, созданный в примере 1.
(Get-Content -Path . \LineNumbers.txt -TotalCount 25)[-1] This is Line 25
Команда Get-Content
заключена в круглые скобки, чтобы команда была завершена перед переходом к следующему шагу.
возвращает массив строк, что позволяет добавить нотацию индекса после круглых скобок, чтобы получить определенный номер строки. В этом случае [-1]
индекс задает последний индекс в возвращенном массиве из 25 извлеченных строк.
Пример 4. Получение последней строки текстового файла
Эта команда получает последнюю строку содержимого из файла. В этом примере используется LineNumbers.txt
файл, созданный в примере 1.
Get-Item -Path .\LineNumbers.txt | Get-Content -Tail 1 This is Line 100
В этом примере командлет используется Get-Item
для демонстрации возможности передачи файлов в Get-Content
параметр . Параметр Tail получает последнюю строку файла. Этот метод выполняется быстрее, чем извлечение всех строк и использование индексной
нотации.
Пример 5. Получение содержимого альтернативного потока данных
В этом примере описывается использование параметра Stream для получения содержимого альтернативного потока данных для файлов, хранящихся на томе Windows NTFS. В этом примере Set-Content
командлет используется для создания примера содержимого в файле с именем Stream.txt
.
Set-Content -Path .\Stream.txt -Value 'This is the content of the Stream.txt file' # Specify a wildcard to the Stream parameter to display all streams of the recently created file. Get-Item -Path .\Stream.txt -Stream * PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Test\Stream.txt::$DATA PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Test PSChildName : Stream.txt::$DATA PSDrive : C PSProvider : Microsoft.PowerShell.Core\FileSystem PSIsContainer : False FileName : C:\Test\Stream.txt Stream : :$DATA Length : 44 # Retrieve the content of the primary, or $DATA stream.# Retrieve the content of the primary stream. Note the singlequotes to prevent variable substitution. Get-Content -Path .\Stream.txt -Stream $DATA Get-Content -Path .\Stream.txt -Stream ':$DATA' This is the content of the Stream.txt file # Alternative way to get the same content. Get-Content -Path .\Stream.txt -Stream "" # The primary stream doesn't need to be specified to get the primary stream of the file. # This gets the same data as the prior two examples. Get-Content -Path .\Stream.txt This is the content of the Stream.txt file # The primary stream doesn't need to be specified to get the primary stream of the file. # This gets the same data as the prior two examples. Get-Content -Path .\Stream.txt # Use the Stream parameter of Add-Content to create a new Stream containing sample content. Add-Content -Path .\Stream.txt -Stream NewStream -Value 'Added a stream named NewStream to Stream.txt' # Use Get-Item to verify the stream was created. Get-Item -Path .\Stream.txt -Stream * PSPath : Microsoft. PowerShell.Core\FileSystem::C:\Test\Stream.txt::$DATA PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Test PSChildName : Stream.txt::$DATA PSDrive : C PSProvider : Microsoft.PowerShell.Core\FileSystem PSIsContainer : False FileName : C:\Test\Stream.txt Stream : :$DATA Length : 44 PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Test\Stream.txt:NewStream PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Test PSChildName : Stream.txt:NewStream PSDrive : C PSProvider : Microsoft.PowerShell.Core\FileSystem PSIsContainer : False FileName : C:\Test\Stream.txt Stream : NewStream Length : 46 # Retrieve the content of your newly created Stream. Get-Content -Path .\Stream.txt -Stream NewStream Added a stream named NewStream to Stream.txt
Параметр Stream является динамическим параметром поставщика FileSystem.
По умолчанию Get-Content
извлекает данные только из потока или по умолчанию :$DATA
. Потоки можно использовать для хранения скрытых данных, таких как атрибуты, параметры безопасности или другие данные. Они также могут храниться в каталогах, не будучи дочерними элементами.
Пример 6. Получение необработанного содержимого
Команды в этом примере получают содержимое файла в виде одной строки, а не массива строк. По умолчанию без динамического параметра Raw содержимое возвращается в виде массива строк с разделителями newline. В этом примере используется LineNumbers.txt
файл, созданный в примере 1.
$raw = Get-Content -Path .\LineNumbers.txt -Raw $lines = Get-Content -Path .\LineNumbers.txt Write-Host "Raw contains $($raw.Count) lines." Write-Host "Lines contains $($lines.Count) lines." Raw contains 1 lines. Lines contains 100 lines.
Пример 7. Использование фильтров с Get-Content
Для командлета можно указать фильтр Get-Content
. При использовании фильтров для определения параметра Path необходимо добавить звездочку (*
), чтобы указать содержимое пути.
Следующая команда получает содержимое всех *.log
файлов в каталоге C:\Temp
.
Get-Content -Path C:\Temp\* -Filter *.log
Пример 8. Получение содержимого файла в виде массива байтов
В этом примере показано, как получить содержимое файла в виде
одного объекта.
$byteArray = Get-Content -Path C:\temp\test.txt -AsByteStream -Raw Get-Member -InputObject $bytearray TypeName: System.Byte[] Name MemberType Definition ---- ---------- ---------- Count AliasProperty Count = Length Add Method int IList.Add(System.Object value)
Первая команда использует параметр AsByteStream для получения потока байтов из файла.
Параметр Raw гарантирует, что байты возвращаются в виде [System.Byte[]]
. Если параметр Raw отсутствовал, возвращаемое значение представляет собой поток байтов, который интерпретируется PowerShell как
.
Параметры
-AsByteStream
-Credential
-Delimiter
-Encoding
-Exclude
-Filter
-Force
-Include
-LiteralPath
-Path
-Raw
-ReadCount
-Stream
-Tail
-TotalCount
-Wait
Входные данные
Int64
Вы можете передать число операций чтения или общее число в этот командлет.
String[]
Вы можете передать пути к этому командлету.
PSCredential
Вы можете передать учетные данные в этот командлет.
Выходные данные
Byte
При использовании параметра AsByteStream этот командлет возвращает содержимое в виде байтов.
String
По умолчанию этот командлет возвращает содержимое в виде массива строк, по одной на строку. При использовании параметра Raw возвращается одна строка, содержащая каждую строку в файле.
Примечания
PowerShell включает следующие псевдонимы для Get-Content
:
- Для всех платформ.
gc
type
- Windows:
cat
Командлет Get-Content
предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы получить поставщиков в сеансе, используйте Get-PSProvider
командлет . Дополнительные сведения см. в разделе about_Providers.
- about_Automatic_Variables
- about_Providers
- Add-Content
- Clear-Content
- ForEach-Object
- Get-PSProvider
- Set-Content
Не работает curl, file_get_contents в php после отказа от сертификата DST Root CA X3
- сервер php, mysql, nginx, centos
- клиент js, jquery, react
- клиент-сервер ajax, fetch, node.js
- вёрстка css, html
После 30 сентября 2021 года Let’s Encrypt (бесплатный, автоматизированный и открытый Центр Сертификации) изменил цепочку корневых сертификатов. Цифрового корневой сертификат IdenTrust DST Root CA X3 признан устаревшим и должен быть удалён.
Старая цепочка: domain -> R3 -> ISRG Root X1 -> DST Root CA X3
Новая цепочка: domain -> R3 -> ISRG Root X1
Если вы попытаетесь зайти на сайт (на котором установлен Let`s Encrypt SSL сертификат) с устаревшего устройства после 30 сентября 2021, то получите ошибку Сайт не может обеспечить безопасное соединение.
Аналогично, если ваш сервер используют устаревшие версии библиотек (например, OpenSSL) или корневые сертификаты, то он не сможет сгенеировать нужную цепочку и не сможет программно взаимодействовать с внешними истоничками. Ваш сервер будет аналогичен устаревшему устройству и будет генерировать ошибку Сертификат устарел при попытке обращения к внешним ресурсам с LE сертификатом.
Например, в случае с php (если указано своё хранилище корневых сертификатов) curl вернёт ошибку certificate has expired, а file_get_contents — false.
Если вы попытаетесь воспользоваться консольной утилитой wget, то получите ошибку: ОШИБКА: cannot verify letsencrypt.org’s certificate, issued by «/C=US/O=Let’s Encrypt/CN=R3»: Для запрошенного сертификата истёк срок действия.
Решение проблемы заключается в обновлении ПО устаревших устройств.
https://letsencrypt.org/docs/certificate-compatibility/ — совместимость сертификатов LE с различными платформами.
https://access.redhat.com/solutions/1549003 — как сбросить список доверенных CA сертификатов в RHEL 6+
30 сентября обновилось хранилище сертификатов CA Mozilla. Стало на 1 сертификат меньше:
Если сравним файлы от 30.09.21 и 05.07.21, то увидим, что был удалён именно сертификат DST Root CA X3:
# 1. Для исключения сертификата DST Root CA X3 на уровне сервера следует: # добавить сертификат в черный список trust dump --filter "pkcs11:id=%c4%a7%b1%a4%7b%2c%71%fa%db%e1%4b%90%75%ff%c4%15%60%85%89%10" | openssl x509 | sudo tee /etc/pki/ca-trust/source/blacklist/DST-Root-CA-X3. pem # обновить корневые сертификаты (с учётом черного списка) sudo update-ca-trust # 2. Для восстановления работы curl, file_get_contents требуется указать новые сертификаты в php.ini # скачать последнюю версию CA и разместить в каталоге /etc/ssl/certs/ # https://curl.se/docs/caextract.html wget https://curl.se/ca/cacert.pem -O /etc/ssl/certs/cacert.pem # обновить пути к файлу в php.ini (путь к файлу зависит от конфигурации) mcedit /etc/php.ini # укажите путь до нового файла curl.cainfo = /etc/ssl/certs/cacert.pem openssl.cafile = /etc/ssl/certs/cacert.pem # релоад php-fpm systemctl reload php-fpm
PHP CentOSnginx up: 1.5 г. просмотров: 3.3k
Оценить код:
0 голосов0 голосов0 голосов
Получение ошибки file_get_contents и Curl не активировано — Поддержка
mikemuller
#1
Я только что установил плагин календаря Modern Events и получаю эту ошибку:
«file_get_contents» и «Curl» функции не активированы на вашем сервере. Пожалуйста, свяжитесь с вашим хост-провайдером по этому поводу.
Включены ли эти службы в Local Lightning?
1 Нравится
бен.тернер
#2
Привет, @mikemuller —
Это определенно странно — и Local должен поставляться с этим расширением php.
Если щелкнуть правой кнопкой мыши на сайте и выбрать «Открыть оболочку сайта», вы увидите curl
в выводе при выполнении этой команды:
php -m
Если вы не видите curl
, то, возможно, возникла странная проблема со службой PHP.
Если это так, попробуйте обновить службу, следуя инструкциям в этой ветке форума сообщества с дополнительной информацией и исправлением:
- ImageMagick в Local 5.x
Используя инструкции по приведенной выше ссылке, можете ли вы попробовать повторно загрузить службы PHP и повторить попытку?
Майкмюллер
#3
curl отображается при запуске php -m. Какие-либо предложения? Я предполагаю, что get_file_contents является частью curl?
бен.тернер
#4
Привет, @mikemuller. Трудно понять, как этот плагин пришел к выводу, что эти функции не работают, и, возможно, стоит обратиться к разработчику плагина за дополнительной информацией.
Для справочной информации Функция file_get_contents()
встроена в PHP и используется для чтения файла в виде строки в переменную:
- https://www.php.net/manual/en/function.file-get-contents.php
Учитывая, что плагин также упоминает curl, это заставляет меня думать, что они пытаются получить какой-то удаленный файл. В любом случае, вероятно, неплохо обратиться к разработчикам плагинов, чтобы узнать, что они пытаются сделать, и убедиться, что в Local действительно что-то не работает.
Майкмюллер
#5
Они пытаются получить удаленный файл .json. Я связался с ними, и они сказали, что это проблема с сервером. Если я поставлю это на сервер, он работает правильно, но не с локальным. Должен быть какой-то блок, потому что я работаю локально.
Вот журнал ошибок:
[06 августа 2020 г. 20:27:44 UTC] Предупреждение PHP: get_headers(): операция SSL не удалась с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 1416F086: Процедуры SSL: tls_process_server_certificate: ошибка проверки сертификата в /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/libraries/envato. php на строка 87 [06 августа 2020 г., 20:27:44 UTC] Трассировка стека PHP: [06 августа 2020 г., 20:27:44 UTC] PHP 1. {main}() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:0 [06 августа 2020 г., 20:27:44 UTC] PHP 2. do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:254 [06-Aug-2020 20:27:44 UTC] PHP 3. WP_Hook->do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/plugin.php:478 [06-Aug-2020 20:27:44 UTC] PHP 4. WP_Hook->apply_filters() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :311 [06-Aug-2020 20:27:44 UTC] PHP 5. MEC_feature_mec->addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :287 [06-Aug-2020 20:27:44 UTC] PHP 6. MEC_feature_mec->display_addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /приложение/функции/mec.php:710 [06 августа 2020 г., 20:27:44 UTC] PHP 7. include() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec. php:722 [06-Aug-2020 20:27:44 UTC] PHP 8. MEC_envato->get_MEC_info() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /app/features/mec/addons.php:11 [06 августа 2020 г., 20:27:44 UTC] PHP 9. MEC_envato::get_api_url() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/libraries/envato.php:316 [06 августа 2020 г., 20:27:44 UTC] PHP 10. get_headers() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ библиотеки/envato.php:87 [06-Aug-2020 20:27:44 UTC] Предупреждение PHP: get_headers(): не удалось включить криптографию в /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern- календарь событий/приложение/библиотеки/envato.php в строке 87 [06 августа 2020 г., 20:27:44 UTC] Трассировка стека PHP: [06 августа 2020 г., 20:27:44 UTC] PHP 1. {main}() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:0 [06 августа 2020 г. , 20:27:44 UTC] PHP 2. do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:254 [06-Aug-2020 20:27:44 UTC] PHP 3. WP_Hook->do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/plugin.php:478 [06-Aug-2020 20:27:44 UTC] PHP 4. WP_Hook->apply_filters() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :311 [06-Aug-2020 20:27:44 UTC] PHP 5. MEC_feature_mec->addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :287 [06-Aug-2020 20:27:44 UTC] PHP 6. MEC_feature_mec->display_addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /приложение/функции/mec.php:710 [06 августа 2020 г., 20:27:44 UTC] PHP 7. include() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec.php:722 [06-Aug-2020 20:27:44 UTC] PHP 8. MEC_envato->get_MEC_info() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /app/features/mec/addons. php:11 [06 августа 2020 г., 20:27:44 UTC] PHP 9. MEC_envato::get_api_url() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/libraries/envato.php:316 [06 августа 2020 г., 20:27:44 UTC] PHP 10. get_headers() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ библиотеки/envato.php:87 [06-Aug-2020 20:27:44 UTC] Предупреждение PHP: get_headers(https://webnus.biz): не удалось открыть поток: сбой операции в /Users/mikemuller/Sites/fly-fishing-site/app/ public/wp-content/plugins/modern-events-calendar/app/libraries/envato.php в строке 87 [06 августа 2020 г., 20:27:44 UTC] Трассировка стека PHP: [06 августа 2020 г., 20:27:44 UTC] PHP 1. {main}() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:0 [06 августа 2020 г., 20:27:44 UTC] PHP 2. do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:254 [06-Aug-2020 20:27:44 UTC] PHP 3. WP_Hook->do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/plugin. php:478 [06-Aug-2020 20:27:44 UTC] PHP 4. WP_Hook->apply_filters() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :311 [06-Aug-2020 20:27:44 UTC] PHP 5. MEC_feature_mec->addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :287 [06-Aug-2020 20:27:44 UTC] PHP 6. MEC_feature_mec->display_addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /приложение/функции/mec.php:710 [06 августа 2020 г., 20:27:44 UTC] PHP 7. include() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec.php:722 [06-Aug-2020 20:27:44 UTC] PHP 8. MEC_envato->get_MEC_info() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /app/features/mec/addons.php:11 [06 августа 2020 г., 20:27:44 UTC] PHP 9. MEC_envato::get_api_url() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/libraries/envato. php:316 [06 августа 2020 г., 20:27:44 UTC] PHP 10. get_headers() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ библиотеки/envato.php:87 [06 августа 2020 г., 20:27:44 UTC] Предупреждение PHP: file_get_contents(): Ошибка операции SSL с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 1416F086: Процедуры SSL: tls_process_server_certificate: ошибка проверки сертификата в /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/features/mec/addons. php в строке 39[06 августа 2020 г., 20:27:44 UTC] Трассировка стека PHP: [06 августа 2020 г., 20:27:44 UTC] PHP 1. {main}() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:0 [06 августа 2020 г., 20:27:44 UTC] PHP 2. do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:254 [06-Aug-2020 20:27:44 UTC] PHP 3. WP_Hook->do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/plugin.php:478 [06-Aug-2020 20:27:44 UTC] PHP 4. WP_Hook->apply_filters() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :311 [06-Aug-2020 20:27:44 UTC] PHP 5. MEC_feature_mec->addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :287 [06-Aug-2020 20:27:44 UTC] PHP 6. MEC_feature_mec->display_addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /приложение/функции/mec.php:710 [06 августа 2020 г., 20:27:44 UTC] PHP 7. include() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec.php:722 [06 августа 2020 г., 20:27:44 UTC] PHP 8. file_get_contents() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec/addons.php:39[06-Aug-2020 20:27:44 UTC] Предупреждение PHP: file_get_contents(): не удалось включить криптографию в /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern- event-calendar/app/features/mec/addons. php в строке 39 [06 августа 2020 г., 20:27:44 UTC] Трассировка стека PHP: [06 августа 2020 г., 20:27:44 UTC] PHP 1. {main}() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:0 [06 августа 2020 г., 20:27:44 UTC] PHP 2. do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:254 [06-Aug-2020 20:27:44 UTC] PHP 3. WP_Hook->do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/plugin.php:478 [06-Aug-2020 20:27:44 UTC] PHP 4. WP_Hook->apply_filters() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :311 [06-Aug-2020 20:27:44 UTC] PHP 5. MEC_feature_mec->addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :287 [06-Aug-2020 20:27:44 UTC] PHP 6. MEC_feature_mec->display_addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /приложение/функции/mec.php:710 [06 августа 2020 г., 20:27:44 UTC] PHP 7. include() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec. php:722 [06 августа 2020 г., 20:27:44 UTC] PHP 8. file_get_contents() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec/addons.php:39[06-Aug-2020 20:27:44 UTC] Предупреждение PHP: file_get_contents(https://webnus.net/modern-events-calendar/addons-api/addons-api.json): не удалось открыть поток: операция не удалась в /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/features/mec/addons.php в строке 39. [06 августа 2020 г., 20:27:44 UTC] Трассировка стека PHP: [06 августа 2020 г., 20:27:44 UTC] PHP 1. {main}() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:0 [06 августа 2020 г., 20:27:44 UTC] PHP 2. do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-admin/admin.php:254 [06-Aug-2020 20:27:44 UTC] PHP 3. WP_Hook->do_action() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/plugin.php:478 [06-Aug-2020 20:27:44 UTC] PHP 4. WP_Hook->apply_filters() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook. php :311 [06-Aug-2020 20:27:44 UTC] PHP 5. MEC_feature_mec->addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-includes/class-wp-hook.php :287 [06-Aug-2020 20:27:44 UTC] PHP 6. MEC_feature_mec->display_addons() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar /приложение/функции/mec.php:710 [06 августа 2020 г., 20:27:44 UTC] PHP 7. include() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec.php:722 [06 августа 2020 г., 20:27:44 UTC] PHP 8. file_get_contents() /Users/mikemuller/Sites/fly-fishing-site/app/public/wp-content/plugins/modern-events-calendar/app/ особенности/mec/addons.php:39
Похоже, проблема с проверкой SSL.
бен.тернер
#6
Отлично! Я думаю, что вы правильно прочитали сообщение об ошибке — это что-то, что мешает сайту WordPress установить безопасное соединение через HTTPS.
Судя по разделителю пути журнала, вы используете macOS — какая версия установлена?
Если вы нажмете кнопку «Доверять» в Local, чтобы зарегистрировать SSL-сертификат на компьютере, уберет ли это сообщение об ошибке и позволит ли вам использовать эти функции?
Майкмюллер
#7
Привет, Бен, я использую 10.15.6. У меня есть доверенный SSL. Есть ли способ повторно доверять сертификату? Или есть проблема с локальным SSL, который не проверяется.
Майкмюллер
#8
Я также только что провел тест, используя Lando в качестве локальной среды, и проблема с SSL не возникла. Должно быть что-то с Local Lightning.
бен.тернер
#9
Спасибо, что упомянули, что он работает с Лэндо! Поскольку Lando построен на Docker, это заставляет меня думать, что есть проблема с сертификатами OpenSSL, которые использует локальная версия PHP.
В качестве теста я попытался использовать URL-адрес в предоставленном вами сообщении об ошибке и смог подключиться к API через HTTPS:
https://webnus.net/modern-events-calendar/addons-api/addons- API.json
image999×873 259 КБ
Установлено ли у вас антивирусное программное обеспечение? Поскольку программное обеспечение Local установлено непосредственно на хост-компьютере, возможно, есть что-то, что мешает локальной версии PHP. Причина, по которой что-то вроде Lando будет работать в этом случае, заключается в том, что это виртуализированная среда, и поэтому на нее не будут распространяться настройки безопасности на хост-компьютере.
Майкмюллер
#10
У меня не установлено антивирусное программное обеспечение. Я также смог подключиться к этому URL-адресу.
Майкмюллер
#11
Если бы я предоставил плагин, не могли бы вы попробовать со своей стороны, чтобы увидеть, связана ли проблема с моим компьютером или с тем, как Local использует openSSL?
бен.тернер
#12
Конечно, @mikemuller. Если вы пришлете мне личное сообщение с прикрепленным плагином, я посмотрю. Просто чтобы я точно знал, где я ищу — какой URL-адрес, по которому вы видите исходное сообщение об ошибке?
Майкмюллер
№13
Только что отправил вам сообщение. Дайте мне знать, если вы не получили его.
бен.тернер
№14
Спасибо за ваше терпение с этим @mikemuller — я пробовал различные варианты настройки сайта:
- Новый сайт с режимом маршрутизатора «Домены сайта», по обычному HTTP
- Новый сайт с режимом маршрутизатора «Домены сайта» через HTTPS
- Новый сайт с режимом маршрутизатора «localhost» через HTTP
Во всех этих случаях я смог получить доступ к странице «аддона» для этого плагина в панели администратора WP. Это заставляет меня думать, что с этим сайтом что-то особенное, возможно, конфликт с другим плагином или темой.
image981×770 104 КБ
Можете ли вы попробовать использовать этот плагин на новом простом сайте WordPress с темой по умолчанию? Если это действительно сработает для вас, я бы порекомендовал сосредоточиться на том, какие плагины вызывают проблемы, отключив их и повторно включив их один за другим.
Майкмюллер
№15
Я получаю ту же ошибку:
Предупреждение: file_get_contents(): Ошибка операции SSL с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 1416F086: Подпрограммы SSL: tls_process_server_certificate: сбой проверки сертификата в /Users/mikemuller/Sites/test/app/ public/wp-content/plugins/modern-events-calendar/app/features/mec/addons. php в строке 39
CleanShot 2020-08-19 в 11.22.20@2×3242×2614 971 КБ
Это новая установка WP только с этим плагином. Должно быть что-то в настройках моего мака. Есть идеи??
бен.тернер
№16
Это может быть какая-то настройка с этим Mac. Например, это рабочий компьютер, внедрила ли компания какие-либо настройки безопасности — я думаю о чем-то вроде выпуска собственного SSL-сертификата или центра сертификации.
Еще одна идея. Как давно у вас установлен Local?
Интересно, может есть старая версия службы PHP, которую нужно обновить? Вы можете попробовать сначала создать резервную копию своих сайтов, а затем выполнить шаги, описанные в этом ответе, которые удаляют текущую службу PHP и загружают последние:
ImageMagick в Local 5. xSupport
Всем привет, Благодарим за терпение. Доступны исправления для macOS для PHP 5.6.39 и PHP 7.4.1. GD был повторно добавлен в PHP 5.6.39.и динамические библиотеки для ImageMagick в PHP 7.4.1 были обновлены, поэтому больше не нужны зависимости для установки brew. Решение. Если вы столкнулись с этой проблемой и используете macOS с PHP 5.6 или 7.4, см. раздел Как вручную обновить загружаемые службы Lightning? чтобы исправить эту проблему. Примечание: PHP 7.3.5 также был обновлен на нашем сайте…
Майкмюллер
# 17
Я только что установил новую виртуальную машину с Mac OS и новую копию Local и получаю ту же ошибку. Установка MacOS — 10.15.5, то есть Catalina. В этой версии не должно быть старых версий PHP.
Какой компьютер и ОС вы используете, где он работает?
Майкмюллер
# 18
Я также проверил руководство по обновлению служб и не вижу 7.3.5 в этой папке. Означает ли это, что он загружается из моей основной Mac OS?
бен.тернер
# 19
Майкмюллер:
Какой компьютер и ОС вы используете, где он работает?
У меня есть 13-дюймовый Mac Pro с установленным 10.15.5 (19F101)
.
Я также использую последнюю версию Local — 5.6.10
Какая версия Local установлена?
Майкмюллер:
Я не вижу 7.3.5 в этой папке. Означает ли это, что он загружается из моей основной Mac OS?
Local не будет использовать никакой другой PHP, кроме того, с которым он поставляется. У вас есть скриншот папки, в которой вы ищете?
Майкмюллер
#20
Вот скриншот
Cleanshot 2020-08-21 AT 19.34.59@2×1692 ° С1456 221 KB
Следующая страница →
Как исправить Warding: File_get_contents ». без конца, потому что, если вы столкнулись с этим, вы, вероятно, на самом деле не сделали ничего плохого. Тем не менее, на вашем сайте будут наклеены следующие слова:
Предупреждение: file_get_contents ( путь/к/wordpress/файлу ): не удалось открыть поток: нет такого файла или каталога в /путь/к/другому/wordpress/file.php в строке #
само сообщение об ошибке почти вводит в заблуждение, потому что в нем перечислены два файла и номер строки в конце, что в противном случае указывало бы на конкретную проблему в файле, если бы это была другая ошибка, хотя это не всегда так.
Чаще всего эта ошибка свидетельствует о том, что ваш хостинг-провайдер установил лимиты на ваши ресурсы, а именно на запросы открытых потоков и вы начали их превышать. Это также может быть конфликт с используемым вами плагином, обычно из-за этих ограничений.
В этом посте я покажу вам, как устранить ошибку «Предупреждение: file_get_contents» в WordPress, чтобы определить причину, а затем покажу, как ее устранить.
Мы рассмотрим следующее:
- Деактивировать, а затем повторно активировать плагин, вызывающий ошибку .
- Отладка ошибки
- Включить allow_url_fopen
- Свяжитесь с вашим хостинг-провайдером
- Все еще не можете исправить ошибку?
Деактивировать, а затем повторно активировать подключаемый модуль, вызывающий ошибку
Первое, на что следует обратить внимание при устранении неполадок, — это сообщение об ошибке. Перечисленные файлы должны дать вам подсказку, так как один или оба из них, вероятно, указывают на скрипт или файл плагина, например /home/username/public_html/wp-content/plugins/plugin-name/problem-file. php . .
Если вы видите похожий путь к файлу в ошибке, которую вы видите, свяжитесь с автором плагина и сообщите ему точную ошибку, которую вы видите.
Как правило, автор плагина может внести небольшую корректировку, чтобы компенсировать хостинг-провайдеров, ограничивающих ресурсы.
Это не значит, что плагин, который вы используете, ужасен. Отнюдь не. Это просто означает, что есть лучший способ добавить код, необходимый для плагина, чтобы он был совместим с вашим хостом.
Тем временем вы можете отключить плагин, чтобы избавиться от ошибки, пока автор плагина не выпустит обновление для устранения проблемы.
Отладка ошибки
Кроме того, вы можете включить режим отладки WordPress, чтобы получить дополнительную информацию об ошибке.
Не забудьте также включить ведение журнала, чтобы сообщения об ошибках отображались в личном журнале среди ваших файлов, а не публично во внешнем интерфейсе. Это помогает предотвратить использование хакерами возможной конфиденциальной информации, отображаемой в ошибках.
Подробную информацию о включении режима отладки и регистрации ошибок можно найти в публикации Отладка WordPress: как использовать WP_DEBUG.
После того, как вы соберете некоторые сведения в журнале ошибок и определите, что причиной является плагин, который вы используете, вы можете отправить журнал автору плагина.
Если дойдет до дела и вам нужно связаться с вашим хостом, вы также можете отправить им журнал ошибок, но об этом позже.
Включить
allow_url_fopenВ файл php.ini можно внести одну корректировку, которая работает в некоторых случаях. Если у вас нет файла php.ini , проверьте наличие файла php5.ini .
Он может быть скрыт, что означает, что вам нужно будет получить доступ к настройкам файлов и выбрать параметр, чтобы показать все файлы.
Подробную информацию о редактировании файла php.ini и о том, как включить отображение всех файлов, см. в статье Как увеличить максимальную загрузку и лимит памяти PHP в WordPress.
После того, как вы найдете файл, откройте его и проверьте следующую строку:
Загрузка GIST 14DD1F8D26833054E6A3600FA057723F
, если вы это видите, Switch OFF
до на
, так что он выглядит так:
Эта строка предназначена для отключения функций PHP по получению данных из удаленных мест. Некоторые хостинг-провайдеры включают эту строку для предотвращения SQL-инъекций. Чтобы узнать больше об этом типе взлома, ознакомьтесь с Полным руководством по спаму в WordPress.
Поскольку это может помочь защитить ваш сайт, лучше не настраивать эту строку и вместо этого связаться с вашим хостом, однако, если вы хотите, чтобы ваш сайт работал, пока эта проблема не будет решена навсегда, это может быть хорошим вариантом в то же время.
Просто убедитесь, что вы применяете другие передовые методы, когда речь идет о безопасности сайта, чтобы обеспечить безопасность вашего сайта, пока вы решаете эту проблему. Установка плагина безопасности, такого как Defender, может очень помочь.
Обратитесь к своему хостинг-провайдеру
В большинстве случаев лучший способ решить эту проблему — связаться с вашим хостинг-провайдером, поскольку проблема обычно связана с ограничениями, которые они устанавливают для вашего плана.
Чтобы помочь им прояснить проблему, обязательно предоставьте полное сообщение об ошибке, также это может помочь отправить журнал ошибок.
Имейте в виду, что иногда ваш хост не так уж много может сделать, потому что он устанавливает эти ограничения по какой-то причине. Они могут сделать для вас исключение, но в конечном итоге это может стать для вас признаком того, что вам нужно обновить свой план хостинга на что-то, что предлагает больше ресурсов.
Вы можете выбрать общий, VPS, выделенный или облачный хостинг? Что лучше для WordPress? для получения подробной информации о различных типах хостинга.