When working with PHP on Linux systems, extensions are typically handled differently than on Windows. Here's what you need to know about the Suse Linux 10.3 environment:
// Typical Linux PHP extension path
extension_dir = /usr/lib/php5/extensions
Unlike Windows' .dll files, Linux uses .so (shared object) files for PHP extensions. In your case, while you see pdo.so and pdo_mysql.so, the SQLite-specific extension might need installation.
Before making changes, verify your current PHP configuration:
php -m | grep -i sqlite
php -i | grep -i pdo
If these commands don't show sqlite3 or pdo_sqlite, you'll need to proceed with installation.
For Suse Linux 10.3, use zypper package manager:
sudo zypper refresh
sudo zypper install php5-sqlite
After installation, check the extensions directory again. You should now see:
/usr/lib/php5/extensions/
├── pdo.so
├── pdo_mysql.so
└── pdo_sqlite.so # Newly added
Edit your php.ini file (typically located at /etc/php5/apache2/php.ini) and ensure these lines are present:
extension=pdo.so
extension=sqlite3.so
extension=pdo_sqlite.so
After configuration changes, restart Apache:
sudo /etc/init.d/apache2 restart
Create a test PHP file to verify SQLite functionality:
<?php
// test_sqlite.php
$db = new SQLite3(':memory:');
$db->exec('CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)');
$db->exec("INSERT INTO test (name) VALUES ('SQLite3 working')");
$result = $db->query('SELECT name FROM test');
while ($row = $result->fetchArray()) {
echo $row['name']; // Should output: SQLite3 working
}
?>
If you encounter problems:
- Verify file permissions in the extensions directory
- Check Apache error logs (/var/log/apache2/error_log)
- Ensure all dependencies are installed (libsqlite3-dev)
For PDO SQLite specifically:
<?php
try {
$pdo = new PDO('sqlite:/tmp/test.db');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Create table and test queries...
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
When working with PHP on Linux systems, extension management differs significantly from Windows environments. Unlike Windows' DLL-based extensions, Linux typically uses .so
(shared object) files. The absence of a commented list in php.ini
is normal - Linux distributions often handle extensions through separate config files.
Before making changes, verify your current SQLite status:
php -i | grep -i sqlite
php -m | grep -i pdo
For SUSE Linux 10.3, you have several options:
Method 1: Using Package Manager
zypper install php5-sqlite
# Or for newer PHP versions:
zypper install php7-sqlite3
Method 2: Compiling from Source
If packages aren't available:
wget https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz
tar xvfz sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000
./configure
make
make install
After installation, configure PHP:
- Locate your PHP configuration directory:
/etc/php5/conf.d/
or/etc/php.d/
- Create or edit
sqlite.ini
:
extension=sqlite3.so
extension=pdo_sqlite.so
Create a test script (sqlite_test.php
):
<?php
try {
$db = new SQLite3('test.db');
$db->exec('CREATE TABLE IF NOT EXISTS foo (bar STRING)');
$db->exec("INSERT INTO foo (bar) VALUES ('This is a test')");
$result = $db->query('SELECT bar FROM foo');
var_dump($result->fetchArray());
} catch (Exception $e) {
echo 'SQLite Error: ', $e->getMessage();
}
?>
For production environments, consider these php.ini
settings:
sqlite3.extension_dir = "/usr/local/lib"
sqlite3.defensive = 1
sqlite3.meminfo = 0 # Disable in production
- Missing extension_dir: Ensure the path matches your system's PHP extension directory
- Permission problems: SQLite databases need write permissions in their directory
- Version conflicts: Check PHP and SQLite version compatibility
For more portable code, use PDO:
<?php
try {
$pdo = new PDO('sqlite:/path/to/database.db');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ?');
$stmt->execute([$email]);
$user = $stmt->fetch();
} catch (PDOException $e) {
error_log('PDO Error: ' . $e->getMessage());
}
?>
- Always use parameterized queries
- Restrict database file permissions (chmod 600)
- Never store databases in web-accessible directories
- Consider using
SQLite3::open()
with flags for better control