204 lines
5.5 KiB
Markdown
204 lines
5.5 KiB
Markdown
# PHP Deployment Guide for SemapForm
|
|
|
|
## Requirements
|
|
|
|
- PHP 7.4 or higher (PHP 8+ recommended)
|
|
- PHP extensions:
|
|
- `dom` (for XML generation)
|
|
- `mbstring` (for string handling)
|
|
- `openssl` (for SMTP if using SSL/TLS)
|
|
- Web server (Apache, Nginx, or any PHP-capable server)
|
|
- Optional: PHPMailer library for advanced SMTP support
|
|
|
|
## Installation Steps
|
|
|
|
1. **Upload files to your PHP server:**
|
|
```
|
|
php/
|
|
├── index.php
|
|
├── semesterapparat.php
|
|
├── submit_semesterapparat.php
|
|
├── config.php
|
|
├── functions.php
|
|
├── .htaccess (if using Apache)
|
|
└── static/
|
|
└── styles.css
|
|
```
|
|
|
|
2. **Configure email settings:**
|
|
|
|
Edit `config.php` or set environment variables:
|
|
- `MAIL_ENABLED`: Set to `true` to enable email sending
|
|
- `SMTP_HOST`: Your SMTP server (e.g., smtp.ph-freiburg.de)
|
|
- `SMTP_PORT`: SMTP port (465 for SSL, 587 for TLS, 25 for plain)
|
|
- `SMTP_USERNAME`: Your SMTP username
|
|
- `SMTP_PASSWORD`: Your SMTP password
|
|
- `MAIL_FROM`: Sender email address
|
|
- `MAIL_TO`: Recipient email address
|
|
|
|
3. **Set permissions:**
|
|
```bash
|
|
chmod 755 *.php
|
|
chmod 644 config.php
|
|
chmod 644 static/styles.css
|
|
```
|
|
|
|
4. **Test the installation:**
|
|
- Navigate to your server URL (e.g., `https://yourserver.com/php/`)
|
|
- Try submitting a test form
|
|
- Check email delivery or server logs
|
|
|
|
## Email Configuration Options
|
|
|
|
### Option 1: PHP's built-in mail() function
|
|
- Simplest setup
|
|
- Requires server to have mail transfer agent (MTA) configured
|
|
- No additional configuration needed in PHP
|
|
|
|
### Option 2: SMTP with PHP's native functions
|
|
- Configure SMTP settings in `config.php`
|
|
- Works with basic authentication
|
|
- Current implementation in `functions.php`
|
|
|
|
### Option 3: PHPMailer (Recommended for production)
|
|
- Install PHPMailer via Composer:
|
|
```bash
|
|
composer require phpmailer/phpmailer
|
|
```
|
|
- Better error handling and SMTP support
|
|
- Already integrated in `functions.php` (will auto-detect if available)
|
|
|
|
## Server-Specific Notes
|
|
|
|
### Apache
|
|
- The `.htaccess` file is included for URL rewriting and security
|
|
- Ensure `mod_rewrite` is enabled
|
|
|
|
### Nginx
|
|
- Add this to your nginx.conf:
|
|
```nginx
|
|
location /php {
|
|
index index.php;
|
|
try_files $uri $uri/ /index.php?$query_string;
|
|
|
|
location ~ \.php$ {
|
|
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
|
fastcgi_index index.php;
|
|
include fastcgi_params;
|
|
}
|
|
}
|
|
```
|
|
|
|
### Shared Hosting
|
|
- Most shared hosts have PHP and mail() pre-configured
|
|
- Upload files via FTP/SFTP
|
|
- Set environment variables through hosting control panel
|
|
- Test mail() function first before adding SMTP
|
|
|
|
## Email Logging
|
|
|
|
The application now includes comprehensive email logging:
|
|
|
|
- **Log Location**: `php/mail.log`
|
|
- **Log Format**: `[YYYY-MM-DD HH:MM:SS] [LEVEL] Message`
|
|
- **Configuration**:
|
|
- Set `LOG_ENABLED = true` in `config.php` to enable logging
|
|
- Logs are also written to PHP error_log with `[MAIL]` prefix
|
|
|
|
### What Gets Logged
|
|
|
|
- Email send attempts with from/to/subject
|
|
- Email content length
|
|
- SMTP connection details (host, port, encryption)
|
|
- PHPMailer initialization and configuration steps
|
|
- Success/failure status for each send attempt
|
|
- Detailed error messages for failed sends
|
|
- When mail is disabled (includes full XML content)
|
|
|
|
### Viewing Logs
|
|
|
|
```bash
|
|
# View recent log entries
|
|
tail -f php/mail.log
|
|
|
|
# View last 50 lines
|
|
tail -n 50 php/mail.log
|
|
|
|
# Search for errors
|
|
grep ERROR php/mail.log
|
|
|
|
# Search for successful sends
|
|
grep SUCCESS php/mail.log
|
|
```
|
|
|
|
### Log File Management
|
|
|
|
The log file is automatically created when needed. To rotate logs:
|
|
|
|
```bash
|
|
# Manual rotation
|
|
mv php/mail.log php/mail.log.$(date +%Y%m%d)
|
|
touch php/mail.log
|
|
chmod 666 php/mail.log
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Emails not sending
|
|
1. Check `MAIL_ENABLED` is set to `true`
|
|
2. **Check `php/mail.log`** for detailed error messages
|
|
3. Verify SMTP credentials are correct
|
|
4. Check server error logs: `tail -f /var/log/apache2/error.log`
|
|
5. Test with `MAIL_ENABLED=false` to see XML output in logs
|
|
|
|
### Form validation errors
|
|
- Ensure all required fields have values
|
|
- Check email format validation
|
|
- Verify POST data is being received
|
|
|
|
### Permission errors
|
|
- Ensure PHP has read access to all files
|
|
- Check web server user/group permissions
|
|
|
|
## Security Recommendations
|
|
|
|
1. **Move config.php outside web root** if possible
|
|
2. **Use environment variables** for sensitive data
|
|
3. **Enable HTTPS** for form submissions
|
|
4. **Sanitize all inputs** (already implemented in `functions.php`)
|
|
5. **Set production error reporting** in `config.php`:
|
|
```php
|
|
error_reporting(0);
|
|
ini_set('display_errors', 0);
|
|
```
|
|
6. **Regular updates**: Keep PHP and server software updated
|
|
|
|
## Migrating from Docker/Python
|
|
|
|
The PHP version maintains feature parity with the Python/FastAPI version:
|
|
- ✅ Same form fields and validation
|
|
- ✅ XML generation with identical structure
|
|
- ✅ Email sending with SMTP support
|
|
- ✅ Same CSS and frontend behavior
|
|
- ✅ Theme toggle functionality
|
|
- ✅ Multi-book/media support
|
|
- ✅ Optional fields (title, signature, Dauerapparat)
|
|
|
|
## Environment Variables
|
|
|
|
You can set these as server environment variables instead of editing `config.php`:
|
|
|
|
```bash
|
|
export MAIL_ENABLED=true
|
|
export SMTP_HOST=smtp.ph-freiburg.de
|
|
export SMTP_PORT=465
|
|
export MAIL_USERNAME=your_username
|
|
export MAIL_PASSWORD=your_password
|
|
export MAIL_FROM=alexander.kirchner@ph-freiburg.de
|
|
export MAIL_TO=semesterapparate@ph-freiburg.de
|
|
```
|
|
|
|
## Support
|
|
|
|
For issues specific to your hosting environment, consult your hosting provider's PHP documentation.
|