| mg.write("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n") |
| |
| mg.write([[ |
| <html><body> |
| <p>This is another example of a Lua script, creating a web page served by the |
| <a href="https://github.com/civetweb/civetweb/">CivetWeb web server</a>. |
| </p><p> |
| The following features are available: |
| <ul> |
| ]]) |
| |
| mg.write("<li>" .. _VERSION .. " server pages</li>") |
| if sqlite3 then |
| mg.write("<li>sqlite3 binding</li>") |
| end |
| if lfs then |
| mg.write("<li>lua file system</li>") |
| end |
| |
| |
| mg.write("</ul></p>\r\n") |
| mg.write("<p> Today is " .. os.date("%A") .. "</p>\r\n") |
| mg.write("<p> URI is " .. mg.request_info.uri .. "</p>\r\n") |
| |
| mg.write("<p>Database example:\r\n<pre>\r\n") |
| |
| -- Open database |
| local db = sqlite3.open('requests.db') |
| -- Note that the data base is located in the current working directory |
| -- of the process if no other path is given here. |
| |
| -- Setup a trace callback, to show SQL statements we'll be executing. |
| -- db:trace(function(data, sql) mg.write('Executing: ', sql: '\n') end, nil) |
| |
| -- Create a table if it is not created already |
| db:exec([[ |
| CREATE TABLE IF NOT EXISTS requests ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| timestamp NOT NULL, |
| method NOT NULL, |
| uri NOT NULL, |
| addr |
| ); |
| ]]) |
| |
| -- Add entry about this request |
| local stmt = db:prepare( |
| 'INSERT INTO requests VALUES(NULL, datetime("now"), ?, ?, ?);'); |
| stmt:bind_values(mg.request_info.request_method, |
| mg.request_info.uri, |
| mg.request_info.remote_port) |
| stmt:step() |
| stmt:finalize() |
| |
| -- Show all previous records |
| mg.write('Previous requests:\n') |
| stmt = db:prepare('SELECT * FROM requests ORDER BY id DESC;') |
| while stmt:step() == sqlite3.ROW do |
| local v = stmt:get_values() |
| mg.write(v[1] .. ' ' .. v[2] .. ' ' .. v[3] .. ' ' |
| .. v[4] .. ' ' .. v[5] .. '\n') |
| end |
| |
| -- Close database |
| db:close() |
| |
| mg.write([[ |
| </pre> |
| </p> |
| </body></html> |
| ]]) |