{"id":19230128,"url":"https://github.com/changkun/destrictor","last_synced_at":"2026-06-21T00:35:34.314Z","repository":{"id":96323324,"uuid":"175035297","full_name":"changkun/destrictor","owner":"changkun","description":"an SVN-based Web CMS","archived":false,"fork":false,"pushed_at":"2023-09-03T16:44:33.000Z","size":143,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-23T11:15:37.170Z","etag":null,"topics":["apache2","cms","php7","svn"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/changkun.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-11T15:58:44.000Z","updated_at":"2023-09-03T16:44:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"889b056c-5a14-417f-b2d4-c3750ce3d605","html_url":"https://github.com/changkun/destrictor","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/changkun/destrictor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changkun%2Fdestrictor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changkun%2Fdestrictor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changkun%2Fdestrictor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changkun%2Fdestrictor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/changkun","download_url":"https://codeload.github.com/changkun/destrictor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changkun%2Fdestrictor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34590214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache2","cms","php7","svn"],"created_at":"2024-11-09T15:36:58.555Z","updated_at":"2026-06-21T00:35:34.301Z","avatar_url":"https://github.com/changkun.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `destrictor`\n\n`destrictor` is a CMS that is oritinally written by [Richard Atterer](http://atterer.org/destrictor),\nwhich takes a fundamentally different approach\nto some technical aspects of content generation.\nIts aim is to get maximum performance by not building pages when they are fetched,\nbut only whenever their content is edited.\n\nContent is not stored in a database, but an SVN repository.\nThe CMS is written in PHP, but it does not execute any of its code\nwhen individual pages are fetched.\nInstead, `destrictor` is called from an SVN post-commit hook (and releated hooks)\nwhen content changes. It works out what has changed, regenerates the appropriate HTML files,\nand writes them to a \"cache\" directory,\nwhich is served by Apache or another web server as static content.\n\nSo-called dependencies play a role in making the generation work.\nFor example, one of the supplied modules is responsible for generating a menu on each page.\nIf the title of a page appears in the navigation menu on other pages,\nthen the content of these other pages needs to be regenerated whenever the first page changes.\nThe dependency system takes care of this, and also takes dependency loops into account.\n\nThe above description may sound as if only static HTML web pages can be generated,\nbut this is not the case. The output can also include PHP code snippets,\nfrom which the system will generate “static PHP files”. As a result,\nonly your PHP code will execute when the respective page is fetched,\nand not any of `destrictor`'s code.\n\nThis CMS has been in use on a production website for a few years.\nStill, I think a lot of additional work would be required to make it fully-featured.\n\n## About this repository\n\nThis repository migrates the [original `destrictor`](http://atterer.org/destrictor)\nwhich\n\n- migrates from PHP5 to PHP8+\n- migrates from Apache 2.2 to Apache 2.4+\n- eliminates the connection of `destrictor` and its served website, i.e. a website that managed by `destrictor`\ncan be access completely by an irrlevant address;\n- UTF-8 native support\n\n## Requirements\n\n- Apache 2.4+\n- SVN 1.10+\n- PHP 8+\n- [php-dom](http://php.net/manual/en/book.dom.php), [php-mbstring](http://php.net/manual/en/book.mbstring.php)\n- [tidy](http://tidy.sourceforge.net/)\n\n## Quick start\n\nTo use `destrictor` as your CMS:\n\n1. place `destrictor` to a public observable Apache folder (e.g. `/www/var/html`);\n2. configure your folders in `config.php`, you only need to set `CACHE`/`REPOSITORY`/`WEBSITEPORT`;\n3. access `destrictor` through your browser and follow the installation instructions.\n\n## Design Reason\n\n### Why not migrate to Nginx?\n\n`destrictor` is desgined as a CMS for multi users, therefore the system must provide\naccess control to different people. Nginx is less convenient than Apache2 since\nwe are using `.htaccess` for the level of folder authorizations which can be precisely\ncontroled.\n\n### Why not migrate to Git?\n\n`destrictor` has been use for production more than 10 years. From years of\npractices and observations, SVN is a better decision than Git since it support sub-directory checkout.\nOne can simply checkout a needed folder without checkout a entire repository.\nOver more than 10 years of using `destrictor`, the volume of the repository is more than 50GB+,\nwhich is impossible to be checkout entirely if a new website user arrives.\nAlthough one can use tools like git-svn, it will increase the complexity of environment and deployment.\n\n## License\n\nGNU GPLv3","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchangkun%2Fdestrictor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchangkun%2Fdestrictor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchangkun%2Fdestrictor/lists"}