2016-12-13 8 views
4

У меня есть система PHP работает на AWS и класс, загружать в XLSX файл на внешнем сервере, используя shh2 и SFTP. Этот код работал отлично до последнего обновления АМС пакета OpenSSH-клиентов-6.6.1p1-31.62 и OpenSSH-сервера 6.6.1p1-31.62 к этому времени у меня есть Segfault во FOPEN. Fopen создает файл на внешнем сервере. Вот код:вина Сегментация на FOPEN с помощью SFTP и ssh2

$stream = @fopen("ssh2.sftp://$this->sftp$remote_file", 'w'); 

Затем я использую $ поток для записи содержания, но код остановки на Еореп bacause в Segfault. Я ничего не знаю об этой проблеме, я думаю, проблема заключается в новом обновлении opnessh, потому что php-код не изменяется. Любая идея?

+0

Это большая проблема. Наверняка никто, кроме нас, не сталкивался с этим ... – BigTon

+0

У меня такой же эффект (segfault) на машине Debian 8. Это началось после того, как я установил обновление: Start-Date: 2016-12-14 12:53:53 CommandLine: APT-получить обновление Обновление: склонные: amd64 libapache2-мод-php5: amd64 php5-MySQL: amd64 питон-urllib3: amd64 php5-общие: amd64 php5-ротор: amd64 APT-Utils: amd64 php5-Readline: amd64 libapt-inst1.5: amd64 php5: amd64 libapt-pkg4.12: amd64 php5-cli: amd64 python-запросы: amd64 php-pear: amd64 php5-intl: amd64 – Christian

ответ

14

Найден ответ здесь на StackOverflow: https://stackoverflow.com/a/40972584/2520795

Это кажется так как это обновление PHP, вы должны окружить хост-часть (результат ssh2_sftp()) с intval():

$handle = opendir("ssh2.sftp://".intval($sftp)."/path/to/directory"); 

В моем случае был fopen вместо opendir, но решение такое же.

+1

это сработало для меня, чем k you :) –

+1

Вау, я боролся с этим часами. Спасибо чувак! – alchemication

0

У меня была такая же ошибка, но я нашел PHP bug (см пост от: [2016-12-15 9:47 UTC] по ovoelker на wavecon дот де)

  1. добавить php5-Dev для Компиляция модуля pecl
  2. переустановите модуль ssh2 pecl.
  3. рестарт апаш и хорошо работать
0

В нашем случае intval() не решает ошибки сегментации. Однако изменение формата вызова действительно сработало: