Leaderboard
Popular Content
Showing content with the highest reputation on 04/11/2014 in all areas
-
Install Process Why not try to create a database automatically if it does not exist? When I entered HTTP Host Names and the DB Auth failed, I had to enter this information again. Please do not delete data in input fields if something was entered incorrectly. Adding fields When I add a field, I want to add it directly to one or more templates. This is solved very cumbersome. It would be better if I get a list of all templates and select in which templates the field should be added. Deleting fields "This field can not be deleted because it is used by one or more template ( s ) ." It should be displayed, in which templates the field is used. New Option: Force delete field There should be an option to force delete a field. "The field $fieldname is going to be removed from the following templates a b c Are you sure to delete it? (yes)(no)" New Option: Force delete template This Template is used by 3 pages: Page 1 Page 2 Page 3 Are you sure to delete it? (yes)(no)" What should happen with pages that have this template currently assigned after removal? ( ) Delete them too (X) Assign a new template Creating new templates When i created a new template with template->new from the dropdown-menu i don´t want to get back to the overview page for templates. I want to edit my newly created template directly. So please redirect to the edit page instead. This is a different behavior to adding fields, which works as intended. What was that fieldname again? Please show the name of the field after the label if debug mode is on (or always?) Easier select field The option/label should be only divided by = If no label is assigned, display the option as label What do you think of these improvements?3 points
-
@soma Thanks for your comment It made me realise what i had done. I had manually copied htaccess.txt to .htaccess before running the installer. I've tried lots of CMS's over the past few weeks, and setting up the .htaccess before doing anything else seems to be the norm. Very silly of me. Everything is working fine now. Thanks for all your help and sorry for wasting all your time!!!!!3 points
-
3 points
-
The idea here is get the basics right; not try and get to know everything, especially the deeper stuff in one swoop! Rome wasn't built in a day; but it was built "correctly" from the start; The builders got the basics right Yes, but play "in your league" (no offence meant here). You are trying to play in the big league but you are still a rookie; going by your questions, we can tell you are not ready yet. Rookies need time to learn. So, play in the minor leagues first, then advance upward....I promise you, it will be more enjoyable for you this way... In essence, yes build, but build slowly, build the right way with simple tools first (forget PHP functions and the rest, for instance) - concentrate on the PW API but not the whole cheatsheet! - just $page, $pages and selectors for starters. As you build this way, also play but play according to your current knowledge (level)... I think I have said enough....based on my own experience. Final decision is up to you, of course. I am out....3 points
-
Ok, here it is: Modules Directory: http://modules.processwire.com/modules/process404-search/ Github: https://github.com/adrianbj/Process404Search Includes a small tweak to also convert dashes and underscores to "+" which should improve search results.3 points
-
Dude that is an inactive project (last modified in 2004). Unless your prepared to vet it from a security perspective and update it for current versions of PHP, you should not consider deploying in production. Unless you like being owned.2 points
-
Actually, that was an oversight on my part. I have just committed an update so that GetVideoThumbs now supports CropImage fieldtypes, and any other fieldtypes that are an instanceof FieldtypeImage. Before I was limiting it just to FieldtypeImage. Let me know if it works ok for you. As for the configuration options of CropImage - ie changing the fieldtype (basics tab) vs the inputfield (details tab). I haven't tested, but I always assumed you needed to change both. Might be a more appropriate question for the support thread for that module though.2 points
-
Of course when setting the edited page in context, it will also get used by other admin code and the current admin page is gone. If you still want to have your own Process you could work around it like $currAdminPage = $this->page; $this->fuel->page = $this->pages->get($this->input->get->id); $editForm = $this->modules->ProcessPageEdit->execute(); $this->fuel->page = $currAdminPage; return $editForm;2 points
-
The context is missing for the "page", not sure about the detail ATM anymore but you can get around it by adding this wire()->fuel->set("page", $this->pages->get((int) $this->input->get->id));2 points
-
I'm actually glad that ProcessWire has a lot of this type of safety features. This particular one has saved me many times. Sometimes I'm very bull headed about things. Even with a warning I would have deleted a template (because of course I know what I'm doing). Whenever I get that error, I have to stop and think "Oh yeah, I forgot about that" and then to proceed to delete the template where it won't affect what I have spent hours working on. I can't speak for everyone, but sometimes I think I'm smarter than I am. The safety feature makes me smile because I know that ProcessWire is a development platform that protects me from myself. Maybe there could be an option to turn off some of these safety features for anyone else. I just hope that one doesn't change anytime soon. As stated earlier, some of these suggestions have merit.2 points
-
Nesting level of 1000 didn't help. Deactivating the xdebug extension led to an memory exhaustion error (as expected). This is an endless recursion problem (I think) and therefore cannot be solved by any type of php confoiguration. A possible solution could be to limit indexing the actual text fields, especially ignoring fields that reference other pages to prevent circular references.2 points
-
No worries - we aim to please Thanks again for letting me know about the problem!2 points
-
Krebs has just posted some guidance about heartbleed that might be of interest. FWIW, the Lastpass SSL checker is showing Processwire.com as vulnerable.2 points
-
Thoroughly enjoying that site - it does remind me of some silly requests I have had in sound studios over the years. * "Can we have the sound of headlights sweeping across a window?" * "I need a background atmosphere of two people sitting on a sofa." To which I replied, "doing what?" * "Can we lower the first violins slightly?" The radio producer/client asked me after I had played back a recently discovered, unbelievably rare mono recording of Dmitri Shostakovich conducting one of his OWN works in Moscow when he was young. The recording had been brought to me by a friend who was acting as an archivist for a library of recordings that had been kept hidden away by the Soviets. He thought it would suit this programme. "I cant lower the strings in an already mixed recording," I pointed out. "And anyway, even if I could, I don't think it would be right to do so." "Trust me," said the vain producer. "I know a lot more about Shostakovich than who ever that idiot is who is conducting!"2 points
-
We are now hosting our own store here at processwire.com (previously it was hosted through the DesignIntelligence bookstore). You'll see it as the STORE button on the upper left corner (next to FORUMS and MEMBERS). By hosting it here, we are able to provide better service to you. If you purchase a product through the store, your access in the forums is upgraded automatically at purchase time. Previously people had to request access or I had to track people down and tell them to create a forum account, etc. So the new system is much more automated. Now you can pay by credit card or by PayPal. Previously we could only accept credit card. Now you can purchase upgrades from one version to another. For instance, if you purchased ProCache Single and wanted to later upgrade to ProCache Developer, it lets you do so by paying only the difference in cost. This only works if you have done all the purchases through the new store. (If you did it through the old store and want to upgrade, then just PM me and I'll setup a special coupon code for you that subtracts the cost you already paid). The new store brings more revenue back to development of the ProcessWire project since our merchant fees are now a lot lower (2.5% rather than 10%). We will be adding more products to the store in the coming months, including more modules and enhanced ProcessWire support options for those that want it themselves or for their clients. A change to the FormBuilder and ProCache policies. Previously the developer or agency versions specified that you could install as many copies as you wanted, but only for 1-year (at which time you would renew if you wanted to install more). That time limit has been removed. When you purchase the developer or agency version of either product, you have no time limits. Incidentally, I've never enforced any time limits on either product, but just wanted to state it officially since I've recently been asked about it. The product pages also state this now. The only 1-year limitation that remains in effect is for support and upgrades. The new store lets you renew that automatically or manually, if you want to. The yearly support renewal cost is roughly 1/4 the product cost. For example, $10 for Form Builder Single. Coupon code (today through Saturday) To celebrate the opening of the new store and to make sure we put it through it's paces (not to mention, test the coupon code function) I've setup a coupon code that lasts from today to Saturday (April 1). The code will give you 10% off any Form Builder or ProCache version. The code is NEWSTORE. Please let us know if you see anything that we can improve in the purchase or checkout process. For those interested, the new store runs on IP.Nexus, which is a commercial add-on component to IP.Board (the forum software we use). The merchant gateway is provided by Stripe. A huge thanks to Pete (the forum administrator here) for recommending all this and helping to get everything setup.1 point
-
Launched just a few days ago: http://yummimami.de - a presentational website for a German startup supplying healthy and kid-compatible presented food to schools. Some features Responsive Forms via FormBuilder Navigation via MarkupSimpleNavigation (which, at least in my use case, evolves into something super essential for PW - like Views for Drupal for example ) Widget handling via having a big pool with pages of template type "widget", then referencing (and hence, rendering) them on content pages Editorial influence on the homepage teasers main color via SVG + field + ColorPicker (not necessary to that extent since the customer doesn't need to change the color to any other that magenta, green or brown - but still: proof of concept)1 point
-
My client of the day is a chap for whom I did a couple of banners to run when Double Click was very first launched - 1996? Something like that. It seems he never got round to using them until now but cannot find the CD. He would apreciate it is I could run a new copy for him - he is not prepared to pay. NO I BLOODY WELL CANT! ------------------------------------- Please feel free to post YOUR client of the day.....1 point
-
One of the things I miss from Linux is the ability to browse compressed files and even edit files inside them. Not the ideal. but at least with this tool I can look inside them http://macitbetter.com/BetterZip-Quick-Look-Generator/1 point
-
@Anton - It looks like you are serving PW up via NGINX right? What is your config?1 point
-
1 point
-
1 point
-
Okay, marking Tom's way as the answer. In conjunction with this code in my autoload module I can even have the breadcrumbs displaying correctly: // In init: $this->addHook('ProcessPageEdit::execute', $this, 'articleBreadcrumbs'); public function articleBreadcrumbs($event) { $page = $event->object->getPage(); if ($page->parent == $this->kbHome) { $this->fuel->breadcrumbs = new Breadcrumbs(); // start with a fresh breadcrumbs list $this->fuel->breadcrumbs->add(new Breadcrumb($this->config->urls->admin . 'knowledgebase/', "Knowledgebase")); return $this->fuel->breadcrumbs; } } Since two correct answers were given in this topic I feel a bit bad changing it, but I'm sure Soma won't mind (look at the amount of likes he's had!!).1 point
-
Pete, Have you checked to see if it works from a new admin page with ProcessPageEdit? I have some custom admin pages that use similar custom selectors and they save fine.1 point
-
1 point
-
1 point
-
Well, while we're at it.... Not as much as a problem, something I noticed. I also use the module 'Images With Cropping' [inputfieldCropImage]. I have a field called 'images' and if you select in the 'basics' 'CropImage', the module 'Get Video Thumbnails' doesn't recognize the created field 'images'. Of course I choose 'images' in the 'basics' and in 'details' I choose Inputfield type 'CropImage'. I haven't examined both modules [the coding I mean], again, I'm already happy everything works as expected... Could be 'CropImage' shouldn't even be selectable in the basics. But since I'm in reporting/noticing modus... lol Again, big appreciation for the work you've done!1 point
-
@cmscritic, great idea! @adrian, man you really rock, thanks lots for making this, going to install it on all my PW sites, already installed on one and works flawless! THANKS again.1 point
-
I agree that most of these are good timesavers. Some of them already solved by modules, but I agree, that there is no need for too strict safety nets for developers/superusers.1 point
-
Wow, quick response and action! Actually I just wanted to report, @the moment it wasn't a very big deal for me. Kinda heads up for future reference. But because of your quick modification I've tried it out... and it seems to work just fine, so :ThumbsUp: [there should be a emoticon ] Kind regards!1 point
-
I read this over a few times and it seems to me that @wtrainer has not created the mySQL user and credentials prior to installing ProcessWire.1 point
-
It's not garbled code - view the page source and it will be better formatted showing you all the fields in the template on the page. Echoing $page->fields shows the template name because of the way things are configured, but I honestly don't think there is a real need to ever do that, because you get the same thing from $page->template->name which is more logical if that's what you are after. While it's great to learn and understand the inner workings of the code, I sometimes feel like you are trying to learn too much too soon. Spend more time building and using what you need, rather than dissecting everything. You'll figure out the minor details when the need arises, rather than confusing you before you a full handle on the basics. Does that make sense? For a basic PW site you really just need to know that you can echo out any field with $page->fieldname and that an images field either returns a single image, or an array of images depending on the maximum files allowed setting. If you have an array you can foreach through it. That's really the extent of things you need to build your first site. Using your current question - how often do you really need to get all the fields on a given page? I am really not trying to criticize your approach, I just think you'll get more for your effort by just building stuff. Either way, we'll continue to help, but it's always more fun helping with solutions to practical questions1 point
-
Oh, and the other panicky information I hate at the moment is that some sites are recommending change passwords immediately when the correct course of action is probably to change them in a few days so services you use have a chance to patch their servers - otherwise you may get complacent and think you're safe but the server may still have been compromised. It's a bit of a mess to be honest, but most companies seem to be reacting swiftly. One thing I will be trying to do is keep a comprehensive list of sites I have an account with in future.1 point
-
Greetings, I have two opposite interpretations here... I think this is a good moment for us to remember how complex Internet security really is. We can sometimes get the idea that if we just run this or that script we have it covered. But I've been researching security over the past few months, and I'm amazed at how murky the situation is. It seems to me that a lot of our "security" is an illusion. It's only secure as long as no one seriously tries to break in. If a malicious person has enough knowledge, motivation, and time, nothing is completely secure. On the other hand, the "Heartbleed" situation reveals that even security problems are more contained than they first appear. With all the hype, you would think that every server in the world is broken. Read further and you see that most servers weren't even running the compromised SSL library. And the ones that were compromised were able to seal the hole quickly. On a related matter, this situation also revealed how poorly most people understand the basics of the Internet. Advice to rush out and change your passwords was silly. If the server was compromised, your data isn't made safe by changing your password; if the server was "fixed," there is no need (of course, changing passwords regularly is a good idea for entirely separate reasons). Major newspapers published inaccurate (even damaging) information. For example, The New York times published an article suggesting it was the open source nature of the SSL library that is the problem, stating that "its code resides online and can be amended by anyone." There is a lot we can learn here about security, but the lessons are not always so clear. Thanks, Matthew1 point
-
If I understand correctly I don't think there is a built in way of doing this, but I have done something like this programmatically in front-end forms, so you could do the same with a hook on an admin form template. Curious though what your use case is. Couldn't you just have two page fields with the different parents? If not, one solution might be to hook on ProcessPageEdit::processInput and take the value from a text field (child_new) that would be where you'd enter the name of the new page, and then have a select for choosing which parent you want it added to (whichparent). I would actually disable the allow new pages to be create from field option to avoid confusion. Then after you have created the new page from the value of the text field, set it to blank so it can be used again. Sorry I don't have much time right now, so this should be considered pseudo code and ugly pseudo code at that, but maybe it will get you going! class NewPageCreator extends WireData implements Module { public static function getModuleInfo() { return array( 'title' => 'New page creator', 'summary' => '', 'href' => '', 'version' => 1, 'permanent' => false, 'autoload' => true ); } public function init() { $this->addHookAfter('ProcessPageEdit::processInput', $this, 'addToParent'); } public function addToParent($event){ // ProcessPageEdit's processInput function may go recursive, so we want to skip // the instances where it does that by checking the second argument named "level" $level = $event->arguments(1); if($level > 0) return; $pp = $this->post->input->whichparent; if($this->input->post->child_new == '') return; //if no child_new entered, leave now $newchild = new Page(); $newchild->template = $this->templates->get("template-name"); $newchild->parent = $pp; $newchild->of(false); $newchild->title = $this->sanitizer->text($this->input->post->child_new); $newchild->save(); // Save the new child $pp->test_page = $newchild; //add it to the list of selected pages for the page field $pp->child_new = ''; //empty the child_new field - it is now in the main child field $pp->of(false); $pp->save("child_new"); } } I revised this significantly and did a little testing. This should now pretty much work, although note that field names for child_new and whichparent are hardcoded.1 point
-
Hey guys, i have released a new version of AIOM+. The update to version 3.1.3 includes a few improvements in the LESS parser and CSS minification. Also, I have set the status from AIOM+ to stable.1 point
-
Hi totoff, I guess it's not really a secret. I used to run a webagency and I'm used to crazy deadlines. So, no i was not working 24/24 at all. I dont know if this method would work for everybody, but here is how I work : - Give yourself a deadline - Spend 1/8 of the time allocated to plan ahead the project, the data structure, the features. - Use tools, libraries, frameworks you know by heart, and learn one new tool ( no more no less ) at each project. Small tool for a small project, bigger tool for bigger project. - If you run into a bug, give yourself 10min and/or 5 tries max to find the reason of the bug (the reason, not the solution). If not found, don't get stuck, wait the next day. - Don't optimize before going to prod. Wait 24h after going to prod to see bottlenecks, then add one day to fix performance issues ( same thing : only tools you know, learn one new every time ) - Use a good css/js library / framework. - Rely carefully on third party plugins : try to stay the master of your markup. - Work with repeatable design so your css will be repeatable and modularized. - Be the one who design the site : so you can balance difficulty - To do list, to do list. Plan the next day at the end of the day. - If you have the budget, use QA services ( like http://crowdsourcedtesting.com/ ) - Know the market you're coding for. Don't kill yourself for under represented browsers. - Use a laptop, so you can code anywhere ( when you have an idea, etc... ). - Practice, practice, practice1 point
-
The poem was originally by Richard Krogh The Oxford English Dictionary was started at Mill Hill School in a shed in the grounds (just by where I was brought up) And the reasons that it seems so confused is actually quite intentional. When the language was first rationalised, like many languages there were lots of very different spellings of the same word, depending on the origin of the writer (not the word) or the local dialect distortion or just a thousand spelling errors. The compilers had a choice - set a spelling style in stone and thus alienate huge numbers of writers, or look for evidence of the most common spelling in each case. They chose the latter, so bough and cow may sound the same despite different spellings, but they reflect what was most used in each case and not bloody mindedness of the dictionary editor or even the strict lineage of the word. Just to confuse things a little more, English has the largest vocabulary of any language in the world - by miles! It is also one of the most concise (by syllable count and grammar and therefore sentence length), though the Scandinavians on here will no doubt point out that their languages can be shorter. However, this is probably a direct result of them having a thousand words for "can we hurry this up and get inside; I am bloody freezing!" Such is the effect of climate on language...... (PS: Surprisingly, the British do not have a thousand words for rain, but we do have a thousand ways of complaining about it)1 point
-
Great site. Nice Colors Everything is simple, clean and easy to get. Really good. But a small german law advice. All other people can ignore the next lines. Wenn die Datenschutzerklärung zusammen mit dem Impressum auf einer Seite steht, dann muss dies im Linktext ersichtlich sein. Sonst gilt die Datenschutzerklärung als nicht existent und die Seite ist abmahnfähig. Besonders weil Google Analytic verwendet wird...1 point
-
Btw, there seems to be no folder limit on ext4 filesystem. We are running pw installations with well over 100000 folders already.1 point
-
$page: current page function trunc($string, $length) { return substr($string, 0, strpos(wordwrap($string, $length), "\n")); } echo trunc($page->body, 100); // string 100 characters or little less, body field from the current page, cut-of on word This happens all the time, not problem... echo trunc($child->body, 100); ??1 point
-
1 point
-
You can pass variable via render like: echo $pages->get($child->id)->render(array('mobile' => $mobile)); and then in the template use $options['mobile'] to get the value.1 point
-
1 point
-
ProcessWire wordmark on the front, new logo as a neck print on the back. American Apparel BB401 T's. I'll take 5. Discharge printing too - none of this bulletproof plastisol stuff.1 point
-
Just had a thought for a slightly better version. I replaced this: echo $this->pages->get($this->searchPage)->render(array('q' => $term)); with: echo $this->page->render($this->pages->get($this->searchPage)->template->filename, array('q' => $term)); which seems a little cleaner. This change also means that now you only have to add just the one line to your search.php file: if(isset($options['q'])) $input->get->q = $options['q']; No need to change the page title anymore because we are actually now still rendering the 404 page with it's existing fields, just using the template file of the search page. However, I also added the 404 page's body to my search.php file: if(isset($options['q'])){ $input->get->q = $options['q']; $out .= $pages->get(27)->body; } With this approach you can easily then edit the body field of the "404 Page Not Found" page in the PW admin to read something like this: <h3>The page you were looking for is not found.</h3> <p>We have tried to find the content you were looking for, but if we didn't get it right, please use our search engine or navigation above to find the page.</p> Any thoughts on this new version, or the approach in general? Any problems from anyone who has tested it?1 point
-
So I think I "fixed" the issue I was having. Basically, what i did was compare versions 100 and 101 of the User Profile module and found that the processInput functions were different. So I did some testing and copied the entire 101 file into a new module, but changed the processInput function to the one used in the version 100. I then changed the process field on pages -> home -> admin -> profile from ProcessProfile to the new module I just made (called ProcessProfileFix). Now I'm able to upload files directly to the Profile page controlled by the User Profile module. So I guess there is an issue with the processInput function inside the User Profile module?1 point
-
Hey Ryan, I have come up against that wireEncodeJSON issue with a leading 0 (that I had in the phone field module) again with this module. I guess I will need to implement the same workaround, appending a tilde and stripping on loading again. Any chance you could make that change to allow for leading zeros so we don't have to do this forever? Thanks1 point
-
I went ahead and made a "powered by processwire" animated GIF if anyone would like to use it Have two versions - one for black backgrounds and one for white. I made it kind of large so you can shrink it to whatever size you'd like. I am using a setting of 140 by 47 pixels. You can see the one for black backgrounds in action at one of the sites I designed here. I am searching for a GIF animator that will allow PNG files so I can have it completely transparent on any background. Will upload soon. For White Background For Black Backgrounds1 point
-
You can't do this just out of the box but with a autoload module you could easily accomplish this. Also there's useful needed features in there for an editor. Why is this a problem? It may not necessary in most cases... In PW, almost all of these things can be changed modified using hooks on what builds them in the admin. So if you really want to do it, the best way would be through a module like the /site/modules/HelloWorld.module It shows some example of hooks and is worth a look and have a play anyway. This following module hides the InputfieldWrapper "Who can access this page"? in the settings tab for user having a role "editor". <?php class AdminHelperHooks extends WireData implements Module { public static function getModuleInfo() { return array( 'title' => 'My Admin Helper Hooks', 'version' => 1, 'singular' => true, 'autoload' => true ); } public function init() { // add hook to the page edit module and the method that creates the wanted fieldset $this->addHookAfter('ProcessPageEdit::buildFormRoles', $this, "removeSettings"); } function removeSettings(HookEvent $event){ // check what role the user has, if not has editor role do nothing if(!wire("user")->hasRole("editor")) return; // $event->return being the inputfield wrapper $wrapper = $event->return; // set the inputfield wrapper to hidden $wrapper->collapsed = Inputfield::collapsedHidden; // we're done } } Create a new file AdminHelperHooks.module with this code in a new folder /site/modules/AdminHelperHooks/ Install and test with editor user.1 point
-
Hi, This is a complete server configuration block for NGiNX communicating with php-fpm. There are a few things that will require customisation: server_name root access_log and error_log fastcgi_pass - socket or TCP specification configuration blocks relating to 40x and 50x error handling Note the use of fastcgi_param HTTP_MOD_REWRITE On; which quiets an installer error about requiring mod_rewrite. You might also want to copy htaccess.txt to .htaccess in the ProcessWire top-level directory. server { listen 80 default_server; server_name localhost localhost.localdomain; index index.php index.html; root /var/www/html; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log notice; default_type application/x-php; ### SECURITY - Protect crucial files location ~ /\. { deny all; } location ~ /(COPYRIGHT|LICENSE|README|htaccess)\.txt { deny all; } location ~ ^/site(-[^/]+)?/assets/(.*\.php|backups|cache|config|install|logs|sessions) { deny all; } location ~ ^/site(-[^/]+)?/install { deny all; } location ~ ^/(site(-[^/]+)?|wire)/(config(-dev)?|index\.config)\.php { deny all; } location ~ ^/((site(-[^/]+)?|wire)/modules|wire/core)/.*\.(inc|module|php|tpl) { deny all; } location ~ ^/(site(-[^/]+)?|wire)/templates(-admin)?/.*\.(inc|html?|php|tpl) { deny all; } ### GLOBAL REWRITE location / { try_files $uri $uri/ /index.php?it=$uri&$args; } # pass the PHP scripts to FastCGI server on local socket # location ~ .+\.php((/|\?).*)?$ { fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTP_MOD_REWRITE On; include fastcgi_params; } # redirect server error pages to the static page /40x.html # error_page 404 /404.html; location = /40x.html { root /usr/share/nginx/html; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } In the php-fpm configuration you need to specify unix socket or TCP connection parameters and possibly the chdir setting. These are distribution-dependent values and you will need to determine the correct values for your scenario. My configuration is as follows: ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. ;listen = 127.0.0.1:9000 listen = /run/php-fpm/php-fpm.sock ; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0666 listen.owner = nginx listen.group = nginx listen.mode = 0660 ; Chdir to this directory at the start. This value must be an absolute path. ; Default Value: current directory or / when chroot chdir = /var/www/html Please note that I researched these configurations and the preceeding security configuration from original documentation. I did not rely on howtos available on the Internet. Each has been carefully implemented and undergone significant testing before going into production. Regards, Neil Darlow1 point