Поэтому при загрузке страницы на веб-сайте я запускаю сценарий 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-data, и у нее не было разрешения на запись, поэтому она бросала ошибку, которую я не ловил с помощью 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
Это не очень безопасно, хотя и плохая практика так идеально не делает этого. Но если вам нужно затем создать такой каталог, специально предназначенный для хранения этих файлов в иерархии.