Поэтому при загрузке страницы на веб-сайт я запускаю скрипт C, который создает некоторые файлы.
Все прекрасно работает само по себе, но вместе я получаю ошибку сегментации.
system('./cScript /var/www/html/someFile.txt', $returnValue);
Сценарий C принимает этот параметр и создает на его основе другой файл:
FILE *f;
f = fopen ('/var/www/html/someFile.bak', "w");
fprintf (f, "%s", "some content goes here");
fclose (f);
Это работает, если я запускаю скрипт C самостоятельно
Это работает, если я бегу PHP -a
а также system('./cScript /var/www/html/someFile.txt', $returnValue);
Но это не работает, если я запускаю его через браузер. Сценарий C запускается, поэтому я получаю от него ответ в браузере, просто не работает часть создаваемого файла.
Это может быть какое-то разрешение, о котором я не знаю? или проблема, связанная с путем?
Так что да, это была проблема с правами доступа, PHP работал как www-данные, и у него не было разрешения на запись, поэтому он выдавал ошибку, которую я не улавливал, используя свой let-keep-it-extremelly-simple-to-start -с кодом.
Может быть исправлено путем предоставления разрешения www-data:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 770 /var/www/html
Это не очень безопасно, хотя и плохая практика, поэтому в идеале не делайте этого.
Но если вам нужно, то можете также создать какой-то каталог, специально предназначенный для хранения этих файлов высоко в иерархии.
Других решений пока нет …