favorites_urls is a set of scripts to manage and store bookmarks or favorites for web browsers. It supplies two needs:

  • Allows managed sharing of links between a team
  • Works will all browsers; what you see on one browser you will see on any others
  • Easily backed up during normal web site backups

If you do not need any of these, this script is not for you; use the built in bookmarks on your browser. It is a lot simpler to manage and much more polished


Installation is very simple. The simplest thing is to check out a copy of the stable version (v2.0.0) into a web accessible directory:

svn co http://svn.dailydata.net/svn/favorites_urls/stable favorites_urls

As long as your web server can write to the same directory, and index.php is the default page, you are now ready to go.

First Use

You can now open the web site. You should see a simple screen, asking for your username. Enter an alphanumeric username and press Enter, and you have your (empty) page of bookmarks.

To add a bookmark, click the Edit Mode button, then fill out the form under Add a new link. The Category can be any arbitrary string containing alphanumerics, whitespace, punctuation. URL is self explanatory, and Title will be auto-populated if possible after you tab out of the URL field. The Sort Order and Target are described below.

After you press the Add button, you should see the Category appear on the left of the page. Clicking it will display the URL followed by a Delete button.

Clicking the Leave Edit Mode button will return you to normal usage.

Category, Sort Order and Target

Categories can be multi level. For example, you could have Programming as a main category, then PHP, Perl and Javascript as categories under them. To do this is a kludge; separate the category names with a pipe symbol. Thus, to put a URL in the category Programming/PHP, you would enter Programming|PHP as the category. Categories are created dynamically, and there is no way in this version to edit a category.

By default, the lists are sorted alphabetically by Title. You an override this by entering a number in Sort Order. The default for URL’s (links) is 1000, so a number smaller than that will be sorted higher in the display, while one larger than that will be sorted lower. Categories have a default Sort Order of 100, so you can even have one or more links sorted before the category on display by setting it’s Sort Order to less than 100.

Categories can have a Sort Order. You do this by placing colon after the category name, followed by a number. Thus ‘Programming:50|PHP:110’ would put Programming higher in the main list, and PHP lower in the submenu.

In most cases, when you click on a URL, it is opened in a new tab (taget=’_blank’). That means clicking on the same link more than once can open a new tab for each click. To override this, put a constant string in Target. That will open subsequent clicks on the link in the same tab.

Including Files

One of the basic reasons we created this app is the ability to have one or more repositories for bookmarks to be shared by an organization. This is done through “include” files, which are merged into your personal list of URL’s before display.

Each include file is simply another user. For example, an organization could have a menu with common links like webmail, time sheet and the companies web site. By creating a “user” with the name “common”, you can create this, then include it in one or more members page. The following recipe would set up an include account named “common”.

  • Click the button “Not username” to log out of your account
  • Enter the word “common” for username, then click the Set button
  • Click the button labeled “Edit Mode”
  • Enter one or more URL’s under Add a new link
  • Click “Leave Edit Mode”
  • Click “Not common” button
  • Enter your username in the username field and click Set
  • Click the button Edit Mode
  • In Included Files, enter “common”
  • Click Save
  • Click “Leave Edit Mode”

You should now see the contents of the common user merged with your user. If the two accounts contain the same categories, they will be merged also.

Note: you can “include” multiple users by entering the usernames, separated by the pipe symbol (|). They will all be merged into the logged in account for display.

Warning: included accounts can also include other accounts. Do not do this unless you are very careful. If an include file includes another file, which includes the original file, your program will go in an infinite loop. There is no checking on this.


  • No special requirements other than a writable directory and PHP. While not tested with all versions of PHP, it has worked on all 7.x versions we have played with.
  • No ability to choose a separate directory for storage of the read/write data files.
  • There is no security. None. If you put this on an unsecured server, say a public web site, anyone can log in as anyone, change URL’s, etc… There is not even a password for a user. Even if they don’t know your username, a “black hat” can simply create their own account. It is highly recommended that you either keep this on a trusted LAN, or at the least, run a checksum on your .dat files so you are informed whenever they change content.
  • The data is stored in a .dat file, which is a PHP serialized instance of the configuration for a user. The data file is username.dat. If you back up these files, you have a backup of your bookmarks. There is currently no difference between a user and a psuedo user built as an include file.
  • There is currently no way to edit categories or URL’s. You can delete a URL, then re-add it. Categories remain even if they are empty. So, to change the Sort Order of a URL, you have to delete it, then add it with the new Sort Order. To change the Sort Order of a category, you must enter a new URL, using the category:sortorder syntax to set the category order. This will modify it for the current user only.
  • When in Edit mode, the Categories and URL’s have their sort order after them. Even though you can’t change it, you can at least know what they are.
  • There is currently no way to export your list in a human readable form. Plans are to include code that will export as either a CSV or YAML file.
  • There is currently no way to import. Again, we hope to include import at the same time as we do export.
  • This script is licensed under the BSD Open Source license which basically says “do what you want with it” with few restrictions. However, we’d love to know if it helped you with something, or if you fix something, or if you see something that needs to be fixed. You can use the contact form at https://dailydata.net/about-us/contact-us/.