Archive for category PHP

This site can’t be reached…intranet has the same URL as an external website.

This site can’t be reached
This site on the company, organization or school intranet has the same URL as an external website.
Try contacting your system administrator.

This error just plagued me for about 6 hours. I was trying to setup a dev environment which I had working perfectly, but then I decided that I wanted a fresh OS install on my dev computer. It had Linux on it, and I made my yearly switch to Windows. I tend to bounce back and forth every year or so just to keep on my toes on Windows and Linux both. At any rate, I decided to setup a VM for the dev environments separately, as I had them all on the same nginx/php5-fpm setup prior to this move and I wanted them to all be separated and each on their own VM for simplicity and efficiency.

After the VM was installed and everything seemed to be setup correctly, I set my windows hosts file to use the VMs new IP for mysite.dev because I usually use the .dev TLD locally for dev sites. I've been doing this since before .dev was a TLD (which actually is irritating because I'm not the only one that uses .dev for dev sites).

To cut this post short because I don't want to bore you with the details of everything I tried, the issue was that my Windows host file didn't like a redirect that was occurring on my nginx config. I was redirecting mysite.dev to www.mysite.dev, and even though I had mysite.dev in my hosts file, I didn't have www.mysite.dev in there. This used to not be a problem even in Windows, but apparently since the TLD (.dev) came out, this has to be explicit. I could be wrong that this is a recent thing, but if you've tried everything else and keep getting this error, edit your hosts file in windows and add the www.sitename.dev in there as well. It'll probably clear things up for you.

»crosslinked«

No Comments

Why Pay for PHPStorm or Other JetBrains IDE?

If you spend any amount of time working on code, you probably have a favorite text editor or IDE. Everyone has their own opinions. Everyone has applications with which they are  more familiar. I've went through a few different choices over the last few years, but the one I've stayed with 95% of the time during the last two is PHPStorm from JetBrains, which is uncharacteristic of me, because if there's a free version of some category of application, I'll usually make that free version work, rather than pay for commercial software. There's a ton of free IDEs and text editors. Why would I spend money on PHPStorm? Over the next few paragraphs, I'll go into detail as to why I can no longer function at 100% efficiency in any other editor. I'll also mention some things that I wish were better in PHPStorm. When I discuss the good things about PHPStorm, remember that no single thing is the reason I use and pay for the IDE. It's the overall combination of all the features that I like. Most of these individual features are available in other editors. Where PHPStorm shines is it's ability to deliver all the features I want and need in a single application.

An IDE Needs to be Organized!

There's a lot to be said about the readability and organization of an IDE. A modern text editor needs tabs. It also needs the ability to split the active editor window to see code side-by-side. PHPStorm has both of these features. It also has project and structure views which are collapsible. It has an amazing find feature that can be used to search the entire project or within a specific directory. It can search for files or text within those files, and this search is fast. It has a built-in terminal which is also collapsible. It has complete support for working with various SQL databases directly from within the IDE. There's no need to open up a command line database interface or another app like MySQL Workbench. All of that is built into the IDE.

The IDE stays out of your way while you work.

I typically have my editor window taking up most of the screen with all the different panels collapsed. When I need those various features, they are there, but they aren't getting in my way all the time. The version control integration is nice as well, though I usually do all of that from the command line. It shows you the current branch that you have checked out in the lower right of the window, which has come in very handy at times. You can also enable an option which shows the memory usage of the IDE and allows you to click to force a garbage collection or lower this memory usage. All menus are effective and all panels stay out of your way when you don't need them.

Great Shortcuts

I mentioned that I keep most of my panels collapsed in PHPStorm. This is possible because I rarely need them. You may be used to navigating through a project and opening files by finding them in their directory structure within the project, using a project directory tree panel of some sort. PHPStorm has this view, but I rarely need it. I usually know the name of the file I'm wanting to open. The only time I need the project view is when I can't remember the name of the file I need to edit. For all other times I use one of three different shortcuts.

Ctrl + Shift + N

This shortcut searches for file names specifically within the project. The search is very smart as well. If you have a file named user-login-modal.html for instance, and you just remember that it's named something like 'loginmodal', the search is smart enough to know you want user-login-modal.html. I use this shortcut more than any other, because I'm always jumping between different files and this is the simplest/fastest way to find them. Usually I can type about three or four characters and have the correct files as my first choose in its list.

Ctrl + Shift + F

This is a super find utility. It's fast, because PHPStorm indexes your project. It allows you to find any text within all the text of your project. This is especially useful if you have some method name that you want to refactor across your entire code base and you can't remember every specific place that it's used. I use this shortcut all the time.

Double Shift

This quick shortcut is the "ultimate super search everything" feature. You just double tap the shift key. It's like a combination of the previous two shortcuts I've mentioned. So why not just use this one all the time? I honestly can't give you a good reason that I don't use this feature more often, other than to say that before I used PHPStorm I used Netbeans predominantly, and if I remember correctly, it had the same ctrl + shift + n shortcut to open files. So, I was used to using that already. I haven't switched to double shift completely because I forget it's there most of the time. I may have to focus on using it more often now that I've brought it up.

There are other shortcuts that I use but haven't mentioned, and there are probably many that I don't use but could really benefit from utilizing. Everyone should dig through their IDE to get to know all of its features.

Easy Re-factorization

PHPStorm makes it very simple to refactor code. You can refactor anything throughout your code base with just a few keystrokes. If you highlight some text within your editor and hit Shift + F6, you will see a "Rename" dialog which allows you to change the text throughout the project. You can preview the changes before you implement them. If you rename a file, the IDE will search for it's usage throughout the project and give you a preview of refactoring that it can automatically do for you as well. You can also disable these auto-refactoring if you need to. It's just great that it's there.

Multiple Cursor

This is my favorite new-ish text editor feature that has become popular on many editors. It has become essential for me. I first started using multi-cursors in SublimeText. Soon all new text editors had the feature. SublimeText may not have been the first to have this feature, but it was definitely one of the first to do it well. PHPStorm's implementation is very close to the SublimeText implementation and very usable. However, it can get a little slow if you are trying to use more than 20 or so cursors. SublimeText doesn't get slow for me until I'm using about 1500 cursors. However, I rarely need more than ten. So PHPStorm's implementation works well for most things. If I can't do it in PHPStorm, I'll open up Sublime and take it from there. This is rare.

All Other Modern IDE/text Editor Features

All of the features I've mentioned so far are important for me. There are other features that are a must for me as well, that I should also mention.

  • An IDE should have code completion. PHPStorm is the best I've seen in this regard. There's no SublimeText plugin that can even get close to the intelligent code completion that PHPStorm has, or at least I've not found one.
  • Syntax highlighting and good color schemes is a must. I tend to like the default PHPStorm color scheme. I spend a lot more time trying out new color schemes in all text editors than I like to admit. I prefer light color schemes in PHPStorm for some reason. Most of the time I prefer dark. The main point here is to be able to differentiate between the various different "parts of speech" in the programming language, and this works very well in PHPStorm.
  • PHPStorm also has great source code auto-formatting options and makes it simple to reformat code to your preferred code style.

So, you've heard many things that I like about PHPStorm. As I said earlier, no single feature that I've listed is the reason I pay for PHPStorm. It's a huge combination of these features that makes it worth it to me. Netbeans has great code-completion, but doesn't have multi-cursor (or at least didn' the last I checked), and its white space display characters are ugly, if you are showing them. SublimeText has great multi-cursor and the text in the editor itself looks better to me, but it also doesn't have the database integration that PHPStorm has or code-completion that I consider usable. There may be plugins or packages that facilitate both of these, but I need to spend my time coding as much as possible, not digging for plugins that actually work well. PHPStorm has plugins as well, but it comes with everything you really need without adding any plugins, typically. SublimeText is a text editor first and the plugins are used to make it more like an IDE. I'd use SublimeText if I could find good plugins that facilitate most of the features that I've mentioned in this post. You'll find out more about that in a bit. Because even though I predominantly use PHPStorm, there are still times when I open SublimeText.

Why haven't I mentioned any other editors or IDEs besides Netbeans and SublimeText?

Well give me a chance and I will. Quite simply, I've tried just about every editor there is out there. I've tried most of the IDEs. I've given them all the opportunity to convince me. However, today I only use three editors/IDEs regularly. Surprisingly enough, Netbeans isn't one of them. Netbeans was my main IDE for a year or two. I still like it, but I haven't had it installed in a long time. After I switched to PHPStorm, I've not needed it. I also switched to IntelliJ for my Java dev work that I was doing on Netbeans before. Today I mainly use PHPStorm, SublimeText, and Vim.

Ah Vim! I hear some of you getting ready for an editor flame war. I love Vim. I like to use it for simple editing tasks on the command line where I don't have another editor available. You can make Vim do just about anything you want. However, I still prefer using a ready-to-go IDE like PHPStorm for every-day coding.

If PHPStorm is so great, why do I still use SublimeText Occasionally?

Here is where I give you the bad things I've found about PHPStorm and why I still use a simple text editor like SublimeText at times. It won't take long. There isn't a lot, but it would be GREAT if these were addressed by JetBrains.

Large Text Files

PHPStorm can't open up unusually large text files. It will flat out tell you that the file is too large for it to open. This occurs for me when I try to edit a 3.5GB MySQL dump file. Sublime has trouble loading it as well. Vim, however, will take it's time and chew it right up. Bravo for Vim! There is probably an option in PHPStorm to allow it to open large files, but I've not found it, and this is such an infrequent necessity for me that I haven't bothered to dig for it.

Large amount of Cursors

You can add a few hundred cursors on PHPStorm very easily, but good luck typing more than a single character ever 20 seconds or so if you do. It gets noticeable slow at multi-cursor as you add more. It takes a lot to slow down SublimeText in this regard.

I Honestly Hate Most Java Apps

I use SublimeText when I can, because I REALLY REALLY hate most Java-based applications, and I would much rather use SublimeText for this reason. PHPStorm is written in Java which brings with it some good things (like portability), but also some bad things. With enough hardware, you can overlook most of the bad, but I would much rather use a native application over one that runs on the JVM. I'm not a big fan of the look and feel of Java apps. The font rendering in Linux can be terrible, especially if you are using OpenJDK. Switching to Oracle's official JDK seems to fix most of these font-rendering issues. Java apps tend to be bloated and sluggish. There are a few things to consider about this. Java apps require little to no porting to run on different architectures. Java is a very easy language, and the easier a language is, typically, the easier it is for a bad programmer to code something in it (trust me, I know PHP has this same problem). Which leads to a higher population of un-optimized software. However, this really isn't the case with most good Java applications. They are just slower than native apps. It's nearly impossible for them not to be slower. The JVM adds a thick layer of overhead.

Finally the Main Reason I Pay for PHPStorm

It's not expensive. It's priced very reasonably. I originally purchased a personal license for $25 my first year. Renewal is around $53/yr. They just switched to a subscription model and offered two years for the price of one to current license holders. I jumped all over that. They also give their IDE away to students and open source developers...free. I've looked at KomodoIDE as well, and even though their prices have come down, it's still not where JetBrains products are. Komodo offers their full IDE which has support for most languages at $99 for a student or personal freelancer licence. However, that's a one time payment and it doesn't come with upgrades. PHPStorm's licensing gives you free upgrades during the whole year. Also, while Komodo harps on their complete package IDE's multi-language support, I tend to prefer an IDE specific to what I'm doing. PHPStorm has support for all the languages a PHP developer could be using: HTML, SQL, CSS, Javascript, XML, etc. I don't need my IDE to support Python or Java, because I don't code in either of them on a regular basis, and since I have an edu email address, I can get all of the other JetBrains products for free if I need them for personal projects. If I were to suddenly become a Python developer, I'd pay the $53 and get a year subscription to PyCharm (the JetBrains python IDE).

Also one last note... The new JetBrains subscription model isn't just available in yearly terms. There's also monthly. For a single user PHPStorm license, it's only $8.90/month for new users. You can get all of JetBrains products for $24.90/month. This is a great deal. I like to support great products, especially when they make my life easier. JetBrains lured me in two years ago with their special "half-off" offer. Now I'm hooked and gladly pay their low subscription price.

If you aren't convinced to give them a shot, know that this entire post sounds like one huge commercial for their product, and they aren't paying me or coercing me into writing it one bit. I really feel this strongly about their IDE. It makes my coding more enjoyable and more efficient. If I find something better, I'll use it. Until then, take my money JetBrains! I love your products.

, , , ,

No Comments

Safari 9 CSS Not Rendering Correctly

If your code doesn't use lesshat.less, then this won't pertain to your issue probably. In my work on https://draftorpass.com, I had an issue with CSS rendering on our lobby page in the newest version of OS X and iOS. The problem only showed itself in Safari. Safari was reporting various issues with parts of the CSS, but none of that was even related to the issue. After four hours of trying various things, I decided to run our main CSS file through csslint.net. The very first error lead me straight to the root of the issue. There was an unexpected semi-colon.

Safari is way more picky than most other major browsers. Chrome, IE, and Firefox all just ignored this issue. I'm not sure how much I like this strict behavior of Safari. In the last couple of months it has caused me two issues that were hard to track down. I remember a few years ago, IE was the browser that seemed hard to get right. Now it seems that Safari is the biggest nuisance.

Front-end development is something I really try to avoid as much as possible because of these type of issues. The frond-end designer which originated this problem hasn't been working on the project in over a year. It's not really his fault. However, his use of one function from the lesshat library is what caused our site to break on all new Safari browsers. It jacked up all of the CSS just because the function added a semi-colon where it shouldn't have. I would blame the lesshat library itself, but I mainly blame Safari. Being strict about things is great usually, but not when it breaks most of the CSS on a page.

The fix? Just don't use the lesshat keyframes function in any of your less files. Avoid it if you want your site to work in Safari.

Now I'm off to see if I can create a better fix to submit to them.

No Comments

PHPStorm Fonts in Linux

This is just a quick note as there are many suggestions online for fixing fonts in Java apps in Linux. Some require you to change some startup config options like Dawt.useSystemAAFontSettings. These are helpful, but there's one MAJOR under-emphasized change that will help tremendously. Switch to Oracle Java. Most Linux distributions use OpenJDK by default these days. This is where my font rendering problems were. I wondered why Java seemed to suck at rendering fonts in Linux... Well this is the major culprit. Don't ask me the specifics because I don't have time to dig and find the root of the problem. I can just tell you that it's a good first step to switch to Oracle Java before doing all the other things you see online to fix the problem.

No Comments

PHPStorm or other JetBrains Product Multi-select In Linux

If you have trouble using the default ALT + Button1 click keymap in Linux to add to a multi-cursor selection in PHPStorm or any other JetBrains product, you may be able to adjust the default keymap, but if you are like me, you could just as easily use an easier approach. Just add the "super" or "windows" key to the combination. So, try Super + ALT + Button1. That works for me as the desktop environment doesn't see it as an ALT + Button1 click, but PHPStorm does. Using ALT + button1 click alone causes issues for me because the Cinnamon desktop in LinuxMint already has ALT + Button1 mapped to something else, namely window move. I would change this but I actually like having that available if I need it.

No Comments

Force user to login method in Codeigniter without checking Session in every method.

If you need to secure every method of a Codeigniter controller, you can do it with one line instead of checking the session in every method before doing anything else. In the constructor of the controller simply check that $this->router->fetch_method is not equal to your login method and that a user isn't logged in. If you meet both of these criteria, redirect to the login method.

, ,

No Comments

PHP Singletons

It has been quite some time since my last post. However, I will be posting a few object oriented PHP tips over the next few days, especially in regard to design patterns. My first post on the subject will deal with Singletons. As a side note, don't overuse any of these design patterns. They have their purpose and even though you may be tempted to use them in everything after you learn them, notice their benefits and work with them where they can benefit your overall system design.

Singletons are useful when you want only one instance of a class. Thus their name. You may scratch your head and wonder why you'd want to use this design pattern. There are some advantages to it. Firstly, you will reduce resource requirements for your application. It guarantees that you will only have one object taking up memory. Secondly, a singleton can be useful for simulating global variables. You can set a property of the object and access it anywhere in your application.

In a PHP application this can come in handy when you are using controllers in your own MVC framework, when you have a helper class that you only need a single instance of ever, and in any other case where only one object of a class is needed/wanted.

Here is an example of a PHP Singleton:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
  class Singleton {
    private static $_instance;
    private function __construct() {}
    public static function getInstance() {
      if(!self::$_instance) {
        self::$_instance = new self();
      }
      return self::$_instance;
    }
  }
?>

We have a private static property called $_instance. This will hold our single instance of the class. The constructor for the class is private so it can never be called from outside of the class. Thus, it can not be called directly. We call the constructor inside the public static method getInstance(). The whole purpose of this static method is to check to see if there is an instance of the class and if not, create it. It then returns that single instance. So the $_instance property of the class holds the single instance of itself. The recursion can be confusing.

In order to use the singleton, you simply call the static getInstance() method and assign the reference to a variable, or if you only need to execute a single method, you can call the method in a chain. Here is an example each:

1
$mySingleton = Singleton::getInstance();
1
Singleton::getInstance()->someMethod();

No Comments